JSON解析详解

JSON解析详解

1.定义一串测试JSON

{
	"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": "北大"
				}
			]
		}
	]
}

2.JSON分析:

2.1 [ ]括号代表一个数组

2.2 { }大括号代表的是一个对象,在一个对象中还可能包含对象的属性,属性也可能是另外一个类

2.3 " "双引号代表的是属性值

2.4 : 冒号代表的是前后之间的关系,冒号前面是属性名称,后面是属性的值,这个值可以是基本数据类型,也可以是引用数据类型。

以上述代码为例,第一层是一个大括号({ })的JSON数组,JSON数组中包含retCode,retMsg以及data三个属性。

第二层是data的JSONArray属性,每个大括号代表一个对象,每个对象中有name,id,score,schoolinfo四个属性。

第三层其中score属性下包含一个类,类中包含Chinese和Math两个属性。

schoolinfo是一个JSONArray数组,里面有School_name这个属性。

3.JSON各种对象之间的转换(fastjson)

3.1 String——>JSONArray

String st = "[{name:Tim,age:25,sex:male},{name:Tom,age:28,sex:male},{name:Lily,age:15,sex:female}]";
JSONArray jsonarray = JSONArray.parseArray(st);

3.2 JSONArray——>JSONObject

JSONObject jsonobject = new JSONObject();
for(int i=0;i<jsonarray.length();i++){
    jsonobject = jsonarray.getJSONObject[i];
}

3.3 String——>JSONObject

String st = "{name:Tim,age:25,sex:male}";
JSONObject jsonobject = JSONObject.parseObject(st);

3.4 JSONObject——>JSONArray

JSONObject jsonobject = {info:[{name:Tim,age:25,sex:male},{name:Tom,age:28,sex:male},{name:Lily,age:15,sex:female}]};
JSONArray jsonarray = jsonobject.get("info");

4.JSON提供的方法

JSONObject系统自带的解析方式解析,我们先来JSONObject(系统自带的类)类中的方法

其中JSONObject常用的构造方法是:

JsonObject.parseObject("text");

最常用的取值方法是:

JsonObject.getString("key");
JsonObject.getJsonArray("key");

5.JSON数组解析

对result中的每一个值进行取到以及解析

先将String类型的result转为JSON数组类型

JsonObject jsonobject = JsonObject.parseObject(result);

基本数据类型:

String returncode = jsonobject.getString("result中的属性");

引用数据类型:

JsonArray parseArray = jsonobject.getJsonArray("result中的数组类型");

6.解析过程

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")}
}
}

7.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);
  )

8.使用HashMap来构建JsonObject

private static void createJsonByMap(){
    Map<String,Object> testMap = new HashMap<String,Object>();
    Object nullObj = null;
    testMap.put("name","王小二");
    testMap.put("age",25);
    testMap.put("brithday","1900-01-01");
    testMap.put("school","蓝翔");
    testMap.put("major",new String[] {"理发","挖掘机"});
    testMap.put("has_girlfriend",false);
    testMap.put("car",nullObj);
    testMap.put("house",nullObj);
    testMap.put("comment","注释");
    System.out.println(new JsonObject(testMap).toString());
}

9.使用JavaBean来创建对象

public class people{
    private String name;
    private String school;
    private String has_girlfriend;
    private String age;
    private String car;
    private String house;
    private String[] major;
    private String comment;
    private String brithday;
}


public static void createJsonByBean(){
    People r = new People();
    r.setName("王小二");
    r.setAge(25);
    r.setBirthday("1900-01-01");
    r.setSchool("蓝翔");
    r.setMajor(new String[] {"理发","挖掘机"});
    r.setHas_girlfriend(false);
    r.setCar(null);
    r.setHouse(null);
    r.setComment("注释");
    System.out.println(new JsonObject(r));
}

10.前后端Json交互

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());
}
  • 12
    点赞
  • 107
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值