IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> JSON解析详解 -> 正文阅读

[开发测试]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());
}
  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-04-29 12:25:58  更:2022-04-29 12:26:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 8:18:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码