一、json数组基本格式
1.1json数据中符号的含义
先展示一段json代码,并且命名为result,并定义为String类型
{
"retCode":0,
"retMSg":"成功",
"data":[
{
"name":"李雷",
"id":"001",
"score":{
"Chinese":"80",
"Math":"95"
},
"schoolInfo": [
{
"School_name": "清华"
},
{
"School_name": "北大"
}
],
},
{
"name":"韩梅梅",
"id":"002",
"score":{
"Chinese":"90",
"Math":"80"
},
"schoolInfo": [
{
"School_name": "清华"
},
{
"School_name": "北大"
}
}
]
}
json内部格式:
1 []中括号代表的是一个数组
2 {}大括号代表的是一个对象 在一个对象中还可能包含对象的属性 属性也可能是另外一个类
3 双引号“”表示的是属性值
4 冒号:代表的是前后之间的关系,冒号前面是属性的名称,后面是属性的值,这个值可以是基本数据类型,也可以是引用数据类型。
以上述代码为例,第一层是一个花括号的{}Json数组,json数组中包含retCode,retMSg以及data三个属性
第二层是data的JsonArray属性,每个花括号代表一个对象,每个对象中有name,id,score,schoolInfo四个属性。
第三层其中score属性下包含一个类,类中包含Chinese和Math两个属性。
schoolInfo是一个JsonArray数组,里面有School_name这个属性
1.2 Json提供的方法
JSONObject系统自带的解析方式解析,我们先来JSONObject(系统自带的类)类中的方法
其中JsonObjcet常用的构造方法是
JsonObject.paresObject("text")
最常用的取值方法是:
JsonObject.getString("key");
JsonObject.getJsonArray("key")
官方提供的方法如下:
二、Json数组的解析
对result中的每一个值进行取到以及解析
解析前准备工作:
可以将String类型的result转为Json数组类型
JsonObject jsonObject=JsonObject.parseObject(result);
基本数据类型:
String returncode=jsonObject.getString("reusult中的属性");
引用数据类型:(数组)
JSONArray parseArray=jsonObject.getJsonArray("result中的数组类型");
三、解析过程
对于以上代码进行解析:
import com.alibaba.fastjson.Json;
import com.alibaba.fastjson.JsonArray;
import com.alibaba.fastjson.JsonObject;
//转为jsonObject类型
JsonObject jsonObject=JSONObject.parseOject(result);
//取属性值
String returnCode=jsonObject.getString("retCode");
String returnMsg=jsonObject.getString("retMSg");
//取数组值
JSONArray parseArray=jsonObject.getJsonArray("data");
//对数组内部进行处理
for(int i=0;i<parseArray.size();i++){
//和常规数组get(i)是一样的 只不过是JSONObject类型
//eachObject是数组中的每一个类{},因为类包含的属性是相同的,所以相当于循环处理的是这部分
JsonObject eachObject=parseArray.getJSONObject(i);
//第二层的属性
String name=eachObject.getString("name");
String id=eachObject.getString("id");
//处理第三层的JSONObject对象sorce
JSONObject sorceObject=eachObject.getJSONObject("sorce");
//处理第三层JSONObject对象sorce内的属性
String Chinese=sorceObject.getString("Chinese");
String Math=sorceObject.getString("Math");
//处理第三层JSONObject对象内的schoolInfo属性
JSONArray schoolInfoArray = eachObject.getJSONArray("schoolInfo");
for (int j = 0; j < schoolInfoArray.length(); j++) {
JSONObject schoolInfojson = schoolInfoArray.getJSONObject(j);
String schoolName = schoolInfojson.getString("School_name");
}
}
}
解析完毕
四、JsonObject赋值过程
相当于解析过程的逆过程
4.1 原生JsonObject
JsonObject jsonObject=new JsonObject();
JsonArray applist=new JsonArray();
JsonObject obj=JsonObject.parseObject("{
"name":"李雷",
"id":"001",
"score":{
"Chinese":"80",
"Math":"95"
},
"schoolInfo": [
{
"School_name": "清华"
},
{
"School_name": "北大"
}
],
},
{
"name":"韩梅梅",
"id":"002",
"score":{
"Chinese":"90",
"Math":"80"
},
"schoolInfo": [
{
"School_name": "清华"
},
{
"School_name": "北大"
}
}");
applist.add(obj);
jsonObject.put("retCode",0);
jsonObject.put("retMSg","成功");
jsonObject.put("data",applist);
)
4.2 HashMap java bean
因为本人还没有实操过 所以直接贴链接了:
定义一个json数组并赋值
五、JavaObject
有时候前端传来的值为String类型,Json数组需要先把String类型转为JsonObject类型(见上文),然后再使用jsonObject.toJavaObject(Class)将JsonObject转为对应的类类型,这样才能使用类中的属性以及某些方法。
controller层
public JsonResult saveEmoji(@RequestParam(value = "params") String jsString){
//现将String类型转为jsonObject
JSONObject jsonObject= JSON.parseObject(jsString);
if(jsonObject==null){
return JsonResult.error("输入参数为空");
}
//再调用jsonObject.toJavaObject方法转为Emoji类
Emoji emoji=jsonObject.toJavaObject(Emoji.class);
//这样就能调用Emoji类的getUserid()方法获取传递过来的Emoji类中的UserId属性
String userid=String.valueOf(emoji.getUserid());
}
六、参考资料
如果有错误,欢迎批评指正。