java的json解析工具_java 写一个JSON解析的工具类

fed773db50813e2fe338b5a85727d0db.png

上面是一个标准的json的响应内容截图,第一个红圈”per_page”是一个json对象,我们可以根据”per_page”来找到对应值是3,而第二个红圈“data”是一个JSON数组,而不是对象,不能直接去拿到里面值,需要遍历数组。

下面,我们写一个JSON解析的工具方法类,如果是像第一个红圈的JSON对象,我们直接返回对应的值,如果是需要解析类似data数组里面的json对象的值,这里我们构造方法默认解析数组第一个元素的内容。

在src/main/java下新建一个包:com.qa.util,然后在新包下创建一个TestUtil.java类。

packagecom.qa.util;importcom.alibaba.fastjson.JSONArray;importcom.alibaba.fastjson.JSONObject;public classTestUtil {/***

*@paramresponseJson ,这个变量是拿到响应字符串通过json转换成json对象

*@paramjpath,这个jpath指的是用户想要查询json对象的值的路径写法

* jpath写法举例:1) per_page 2) data[1]/first_name ,data是一个json数组,[1]表示索引

* /first_name 表示data数组下某一个元素下的json对象的名称为first_name

*@return, 返回first_name这个json对象名称对应的值*/

//1 json解析方法

public staticString getValueByJPath(JSONObject responseJson, String jpath) {

Object obj=responseJson;for(String s : jpath.split("/")) {if(!s.isEmpty()) {if(!(s.contains("[") || s.contains("]"))) {

obj=((JSONObject) obj).get(s);

}else if(s.contains("[") || s.contains("]")) {

obj= ((JSONArray)((JSONObject)obj).get(s.split("\\[")[0])).get(Integer.parseInt(s.split("\\[")[1].replaceAll("]", "")));

}

}

}returnobj.toString();

}

}

简单解释下上面的代码,主要是查询两种json对象的的值,第一种最简单的,这个json对象在整个json串的第一层,例如上面截图中的per_page,这个per_page就是通过jpath这个参数传入,返回的结果就是3. 第二种jpath的查询,例如我想查询data下第一个用户信息里面的first_name的值,这个时候jpath的写法就是data[0]/first_name,查询结果应该是Eve。

======================================================================================

======================================================================================

将接口请求返回的 response 转换成 json 格式

/***

*@paramresponse, 任何请求返回返回的响应对象

*@return, 返回响应体的json格式对象,方便接下来对JSON对象内容解析

* 接下来,一般会继续调用TestUtil类下的json解析方法得到某一个json对象的值

*@throwsParseException

*@throwsIOException*/

public JSONObject getResponseJson (CloseableHttpResponse response) throwsParseException, IOException {

Log.info("得到响应对象的String格式");

String responseString= EntityUtils.toString(response.getEntity(),"UTF-8");

JSONObject responseJson=JSON.parseObject(responseString);

Log.info("返回响应内容的JSON格式");returnresponseJson;

}

//对象转换成Json字符串

//Users user = new Users("Anthony","tester");

//String userJsonString = JSON.toJSONString(user);

======================================================================================

======================================================================================

Python 用 json 将 string 、dict 互相转换

#!/usr/bin/env python#-*- coding: utf-8 -*-

importjson

string_json= "{"\"\"status\": \"error\","\"\"messages\": [\"Could not find resource or operation 'BZK1.MapServer' on the system.\"],"\"\"code\": 404"\"}"

print('对象:' +string_json)print(type(json.loads(string_json)))print('取值:' + json.loads(string_json)['status'])print('取值:' + str(json.loads(string_json)['code']))print('===========================================')

data1= {'b': 789, 'c': 456, 'a': 123}

encode_json=json.dumps(data1)print(type(encode_json))print(encode_json)print('===========================================')

decode_json=json.loads(encode_json)print(type(decode_json))print(decode_json['a'])print(decode_json)

运行的结果如下:

对象:{"status": "error","messages": ["Could not find resource or operation 'BZK1.MapServer' on the system."],"code": 404}取值:error

取值:404

===========================================

{"b": 789, "c": 456, "a": 123}===========================================

123{'b': 789, 'c': 456, 'a': 123}

======================================================================================

======================================================================================

d90bf7d987f2be75944996d741aeef8c.png    public static voidmain(String[] args) {

//从字符串解析JSON对象

JSONObject obj = JSON.parseObject("{\"runoob\":\"菜鸟教程\"}");//从字符串解析JSON数组

JSONArray arr = JSON.parseArray("[\"菜鸟教程\",\"RUNOOB\"]\n");//将JSON对象转化为字符串

String objStr =JSON.toJSONString(obj);//将JSON数组转化为字符串

String arrStr =JSON.toJSONString(arr);

System.out.println("JSON.parseObject "+obj);

System.out.println("JSON.parseArray "+arr);

System.out.println("JSON.toJSONString "+objStr);

System.out.println("JSON.toJSONString "+arrStr);

}

输出结果如下:

JSON.parseObject {"runoob":"菜鸟教程"}

JSON.parseArray ["菜鸟教程","RUNOOB"]

JSON.toJSONString {"runoob":"菜鸟教程"}

JSON.toJSONString ["菜鸟教程","RUNOOB"]

从 Java 变量到 JSON 格式的编码过程如下:

public voidtestJson() {

JSONObject object= newJSONObject();//string

object.put("string","string");//int

object.put("int",2);//boolean

object.put("boolean",true);//array

List integers = Arrays.asList(1,2,3);

object.put("list",integers);//null

object.put("null",null);

System.out.println(object);

}

在上例中,首先建立一个 JSON 对象,然后依次添加字符串、整数、布尔值以及数组,最后将其打印为字符串。

输出结果如下:

{"boolean":true,"string":"string","list":[1,2,3],"int":2}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值