使用fastJson对json数据的解析

317 阅读2分钟

前言

平时工作中,需要调用接口,并获取返回结果json格式数据中字段值,每次都是现场网络搜索相关方法,我觉得很有必要进行梳理下,后续可以直接使用。

git仓库地址,github.com/alibaba/fas…

具体示例

关于json数据格式化(层级比较清晰,而不是堆在一起),可以直接使用vscode编辑器查看。

{

    "code": "200",

    "data": {

        "currentPage": 1,

        "totalNumber": 200,

        "pageData": [

            {

                "name": "zhangshang",

                "age": 18

            },

            {

                "name": "lisi",

                "age": 20

            }

        ]

    }

}

PS,在编辑器中看到的数据,层次更加清晰。上述json数据中,还包含了对象,数组。

图片.png

获取字段值

导入的依赖

import com.alibaba.fastjson.JSON;  
import com.alibaba.fastjson.JSONArray;  
import com.alibaba.fastjson.JSONObject;

常见方法

// 将json内容的字符串类型转换为json格式对象
JSONObject jsonObject = JSON.parseObject(jsonStr);

// 情况1,json格式,第一层中字段code的值
String code = jsonObject.getString("code");
System.out.println("code: " + code);

// 情况2,json格式,第二层中data有多个字段,currentPage字段的值
JSONObject dataJsonObject = jsonObject.getJSONObject("data");
int currentPage =  dataJsonObject.getIntValue("currentPage");
System.out.println("currentPage: " + currentPage);

// 情况3,json格式,第二层中data有多个字段,包含数组,获取数组中name字段的值
JSONArray pageDataArray = jsonObject.getJSONObject("data").getJSONArray("pageData");
for (int i = 0; i < pageDataArray.size(); i++) {
    JSONObject pageDataObject = pageDataArray.getJSONObject(i);
    System.out.println("name: " + pageDataObject.getString("name"));
}

虽然上述提到3情况,其实只要区分对象还是数组就可以了,无非可能是嵌套几层的情况。 获取对象的值,使用getJSONObject()。
获取数组的值,使用getJSONArray()。
直接获取字段值,getString(),可能还涉及到不同类型值的一些方法。

说点其它

其实很多东西大部分人都是停留在应用层面,我觉得这没问题。先解决基本使用问题,再慢慢深入,理解实现流程。由浅及深,需要一个过程。最近也在跑步,我在想,每个人都有自己的节奏,适合自己的,才是最好的。