注:以下的总结均是引入的jar包fastjson,例子:
String test="{\"response\":{\"api\":\"2.1\",\"args\":[{\"tit\":\"test001\",\"val\":\"测试1\"},{\"tit\":\"test002\",\"val\":\"测试2\"}]}}";
1.将String类型转换为JsonObject对象
JsonObject object=JSON.parseObject("test");
获取Json数据内容,即{\"api\":\"2.1\",\"args\":[{\"tit\":\"test001\",\"val\":\"测试1\"},{\"tit\":\"test002\",\"val\":\"测试2\"}]}
JSONObject json = (JSONObject) object.get("respon");
2.最简单的解析是json格式也为最简单的key-value形式
此时只需json.getString(key值),如获取api,只需json.getString(api);
3.但是很多json都是json数组和json对象一起的,而且存在很多key值,此时我们需要解析时与实体类对应,因为会去填充相同名称的属性。注:在与实体类对应时,如果实体类中有的属性而Json字符串没有的,会默认为null,如果Json字符串中有而实体类中没有的,不做处理。
①Json对象的:使用JSONObject.parseObject
如首先创建一个实体类apiModel,内含属性api,首先获取api的值:
String apiStr=json.getString("api");
与实体类对应:
apiModel a=JsonObject.parseObject(apiStr,apiModel.Class);
②Json数组的:使用JSONArray.parseArray(返回List)
如首先创建一个实体类argsModel,内含属性获取JsonArray数组
JSONArray specialCateArray = json.getJSONArray("args");
与实体类对应:
List<argsModel> argsList=new ArrayList<argsModel>();
argsList=JSONArray.parseArray(specialCateArray.toJSONString(),argsModel.class);
4.还有一种情况是,key和value值比较多,我们只想按照key-value的方式解析存表,或是不知道key值的情况,也就是单独获取json字符串中的key值或value值
比如以上例子仅解析为args=[{"val":"测试1","tit":"test001"},{"val":"测试2","tit":"test002"}],api=2.1
Set<Entry<String, Object>> entrySet=json.entrySet();
for(Entry<String, Object> entry:entrySet){
System.out.print(entry.getKey()+"="+json.getString(entry.getKey())+"\n");
}
注:此文章是本人学习的一点小笔记和总结,若发现有问题欢迎指出,谢谢~