Json数组解析

一、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());
}

六、参考资料

  1. JSON三种数据解析方法
  2. JSON数据解析只要看这个就够了

如果有错误,欢迎批评指正。

  • 12
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值