JSON 数据格式处理之alibaba.fastjson

目录

前言

一、创建JSONObject对象

二、JSON格式的字符串与JSONObject对象相互转换

三、获取key的值

四、反序列化:将可供传输的数据格式转化为对象。

五、list列表遍历

总结


前言

数据传输数据格式,从前使用过XML数据格式,现在嘛很多时候会遇到JSON。

返回的 json格式数据:

{
    "code": "1",
    "msg": "成功",
    "biz_data": {
        "code": 200,
        "data": {
            "resultData": {
                "list": [
                    {
                        "aa001": 10004,
                        "aa002": "张三",
                        "aa003": 15
                    },
                    {
                        "aa001": 10005,
                        "aa002": "李四",
                        "aa003": 20
                    }
                ]
            }
        }
    }
}
// 说明:json格式数据以 key-value 形式组成,key不能重复,可以是对象{},数组列表[]混合组成。
// 序列化:将对象转化为可供传输的数据格式。
// 反序列化:将可供传输的数据格式转化为对象。

一、创建JSONObject对象

// 构造方法:
// public JSONObject()
// public JSONObject(Map<String, Object> map)
// 成员方法:
// public Object put(String key, Object value)
// public void putAll(Map<? extends String, ? extends Object> m)

示例代码:

        // 定义Map集合对象,Map是一个 key-value 的集合对象,key不能重复,每个键最多只能映射到一个值。
        Map<String, Object> map = new HashMap<>();
        map.put("k_name", "张三"); //使用Map的put存值
        map.put("k_sex", "男"); //使用Map的put存值
        map.put("k_name", "李四"); //使用Map的put存值,重复使用k_name,值会被覆盖,李四覆盖张三

        //构造方法传值
        JSONObject gzff_json = new JSONObject(map);
        System.out.println("一,gzff_json:" + gzff_json);
        gzff_json.put("k_age", "30"); //使用JSONObject的put方法
        System.out.println("二,gzff_json:" + gzff_json);

        JSONObject obj_json = new JSONObject();
        obj_json.put("work","程序猿"); // 继续添加新值
        obj_json.putAll(map); // 使用 putAll 方法
        System.out.println("三, obj_json:" + obj_json);

控制台打印结果:

二、JSON格式的字符串与JSONObject对象相互转换

// 成员方法:
// String转JSONObject对象:public static JSONObject parseObject(String text)
// JSONObject对象转String:public static String toJSONString(Object object, SerializerFeature... features)

示例代码:

        String jsonStr="{\"code\":\"1\",\"msg\":\"成功\",\"biz_data\":{\"code\":200,\"data\":{\"resultData\":{\"list\":[{\"aa001\":10004,\"aa002\":\"张三\",\"aa003\":15},{\"aa001\":10005,\"aa002\":\"李四\",\"aa003\":20}]}}}}";
        //字符串转json对象
        JSONObject jsonObject = JSON.parseObject(jsonStr);
        System.out.println("字符串转json对象 jsonObject: "+jsonObject);
        //json对象转字符串
        String jsonString = JSON.toJSONString(jsonObject);
        System.out.println("json对象转字符串 jsonString: "+jsonString);

控制台打印结果:

字符串转json对象 jsonObject: {"msg":"成功","code":"1","biz_data":{"code":200,"data":{"resultData":{"list":[{"aa003":15,"aa002":"张三","aa001":10004},{"aa003":20,"aa002":"李四","aa001":10005}]}}}}


json对象转字符串 jsonString: {"msg":"成功","code":"1","biz_data":{"code":200,"data":{"resultData":{"list":[{"aa003":15,"aa002":"张三","aa001":10004},{"aa003":20,"aa002":"李四","aa001":10005}]}}}}

三、获取key的值

// 常用的成员方法:
// 获取Object类型的值:public Object get(Object key)
// 获取JSONObject类型的值:public JSONObject getJSONObject(String key)
// 获取String类型的值:public String getString(String key)
// 获取Integer类型的值:public Integer getInteger(String key)

示例代码:

        // 获取 二, 步中的 jsonStr 中的值。jsonObject对象 二,步中已经实例化
        Object obj=jsonObject.get("biz_data"); // 可以获取 msg 的值
        System.out.println("--- 一, 获取biz_data对象的值: "+obj);
        JSONObject jObject=jsonObject.getJSONObject("biz_data"); // 获取 msg 的值报错
        System.out.println("--- 二, 获取biz_data对象的值: "+jObject);
        String msg=jsonObject.getString("msg"); //可以获取 biz_data 对象为一个字符串输出
        System.out.println("--- 三, 获取msg对象的值: "+msg);
        int code=jsonObject.getInteger("code");
        System.out.println("--- 四, 获取code对象的值: "+code);

控制台打印结果:

四、反序列化:将可供传输的数据格式转化为对象。

// 根据 二,步中jsonStr 的Key 创建实体对象 Response,Biz_data
package myjson.testmain;

import java.io.Serializable;

/**
 * 2023年12月14日
 * 创建json中key的对应实体类, 并序列化 Serializable,不然会报错额. 也可以使用其它系列化方式
 */
public class Response implements Serializable {
    private static final long serialVersionUID = 1L;
    private String code;
    private String msg;
    private Biz_data biz_data;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Biz_data getBiz_data() {
        return biz_data;
    }

    public void setBiz_data(Biz_data biz_data) {
        this.biz_data = biz_data;
    }

}
package myjson.testmain;

import java.io.Serializable;

/**
 * 2023年12月14日
 * 创建json中key的对应实体类
 */
public class Biz_data implements Serializable {
    private static final long serialVersionUID = 1L;
    private String code;
    private Object data;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}

示例代码:

        // 将 二,步中 jsonStr 转化为 Response 实体类
        Response response=JSONObject.parseObject(jsonStr,Response.class);
        // 获取 jsonStr中 data的值(对象).转化为 JSONObject 对象
        Object dataObject=response.getBiz_data().getData();
        JSONObject jsonObject2 = JSONObject.parseObject(dataObject.toString());
        System.out.println("-=-==-=-=-=jsonObject2: "+jsonObject2);
        //打印出来的结果为:{"list":[{"aa003":15,"aa002":"张三","aa001":10004},{"aa003":20,"aa002":"李四","aa001":10005}]}

控制台打印结果:

五、list列表遍历

// 成员方法:JSONArray parseArray(String text)

// 创建 ReList实体类,Prens(用于反序列化 jsonStr中的resultData中的list列表里的对象)实体类
package myjson.testmain;

import java.io.Serializable;

/**
 * 2023年12月14日
 * 创建json中key的对应实体类
 */
public class ReList implements Serializable {
    private static final long serialVersionUID = 1L;

    private Object list;

    public Object getList() {
        return list;
    }

    public void setList(Object list) {
        this.list = list;
    }
}
package myjson.testmain;

import java.io.Serializable;

/**
 * 2023年12月14日
 * 创建json中key的对应实体类
 */
public class Prens implements Serializable {
    private int aa001;
    private String aa002;
    private int aa003;

    public int getAa001() {
        return aa001;
    }

    public void setAa001(int aa001) {
        this.aa001 = aa001;
    }

    public String getAa002() {
        return aa002;
    }

    public void setAa002(String aa002) {
        this.aa002 = aa002;
    }

    public int getAa003() {
        return aa003;
    }

    public void setAa003(int aa003) {
        this.aa003 = aa003;
    }
}

示例代码:

        // 以String 字符串获 jsonStr中resultData,jsonObject2对象在 四,步中已实力化
        String jsonstr2=jsonObject2.getString("resultData");
        /**
         * 处理方式一, 转换为 JSONObject 对象
         */
        JSONObject jsonObject3 = JSONObject.parseObject(jsonstr2);
        // 转换为 JSONArray 对象
        JSONArray jsonlist = JSONArray.parseArray(jsonObject3.getString("list"));
        System.out.println("-----====jsonlist:"+jsonlist); // 打印出数组
        // 遍历数组
        for (int i = 0; i < jsonlist.size(); i++) {
            // 获取 list 列表中的对象
            JSONObject liobj = jsonlist.getJSONObject(i);
            System.out.println("----liobj:"+liobj); // 打印对象
            System.out.println(liobj.getInteger("aa003")+";"+liobj.getString("aa002")+";"+liobj.getInteger("aa001")); // 打印对象中的值
        }
        /**
         * jsonObject2={"resultData":{"list":[{"aa003":15,"aa002":"张三","aa001":10004},{"aa003":20,"aa002":"李四","aa001":10005}]}}
         * 处理方式二, 将 resultData 转换为实体对象 ReList, 取出 list 处理. 在 ReList实体中添加了 list属性对应Json的 key list
         */
        // 创建 ReList 实体类,和 Prens(用于 反序列化 jsonStr中的resultData中的list列表里的对象)实体类
        ReList respList=jsonObject2.getObject("resultData",ReList.class); // 反序列化,转化为实体类对象
        System.out.println("respList.getList():"+respList.getList());
        // 转换为 JSONArray 对象
        JSONArray arryObj = JSONArray.parseArray(respList.getList().toString());
        List<Prens>  PrenList= arryObj.toJavaList(Prens.class); // 使用 JSONArray 的 toJavaList() 方法,转化为 list
        for (Prens pren:PrenList) { //迭代集合
            System.out.println(pren.getAa001()+"||"+pren.getAa002()+"||"+pren.getAa003());
        }

控制台打印结果:


总结

main方法测试类JsonAlibaba的完整代码:

package myjson.testmain;

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

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 2023年12月14日
 * fastjson 操作
 */
public class JsonAlibaba {
    public static void main(String[] args) {
/*        //返回的 json格式数据
        {
            "code": "1",
                "msg": "成功",
                "biz_data": {
            "code": 200,
                    "data": {
                "resultData": {
                    "list": [
                    {
                        "aa001": 10004,
                            "aa002": "张三",
                            "aa003": 15
                    },
                    {
                        "aa001": 10005,
                            "aa002": "李四",
                            "aa003": 20
                    }
                ]
                }
            }
        }
        }*/
        // 说明:json格式数据以 key-value 形式组成,key不能重复,可以是对象{},数组列表[]混合组成。
        // 序列化:将对象转化为可供传输的数据格式。
        // 反序列化:将可供传输的数据格式转化为对象。

        // 一, 创建JSONObject对象
        // 构造方法:
        // public JSONObject()
        // public JSONObject(Map<String, Object> map)
        // 成员方法:
        // public Object put(String key, Object value)
        // public void putAll(Map<? extends String, ? extends Object> m)

        // 定义Map集合对象,Map是一个 key-value 的集合对象,key不能重复,每个键最多只能映射到一个值。
        Map<String, Object> map = new HashMap<>();
        map.put("k_name", "张三"); //使用Map的put存值
        map.put("k_sex", "男"); //使用Map的put存值
        map.put("k_name", "李四"); //使用Map的put存值,重复使用k_name,值会被覆盖,李四覆盖张三

        //构造方法传值
        JSONObject gzff_json = new JSONObject(map);
        System.out.println("一,gzff_json:" + gzff_json);
        gzff_json.put("k_age", "30"); //使用JSONObject的put方法
        System.out.println("二,gzff_json:" + gzff_json);

        JSONObject obj_json = new JSONObject();
        obj_json.put("work","程序猿"); // 继续添加新值
        obj_json.putAll(map); // 使用 putAll 方法
        System.out.println("三, obj_json:" + obj_json);


        // 二, JSON格式的字符串与JSONObject对象相互转换
        // 成员方法:
        // String转JSONObject对象:public static JSONObject parseObject(String text)
        // JSONObject对象转String:public static String toJSONString(Object object, SerializerFeature... features)

        String jsonStr="{\"code\":\"1\",\"msg\":\"成功\",\"biz_data\":{\"code\":200,\"data\":{\"resultData\":{\"list\":[{\"aa001\":10004,\"aa002\":\"张三\",\"aa003\":15},{\"aa001\":10005,\"aa002\":\"李四\",\"aa003\":20}]}}}}";
        //字符串转json对象
        JSONObject jsonObject = JSON.parseObject(jsonStr);
        System.out.println("字符串转json对象 jsonObject: "+jsonObject);
        //json对象转字符串
        String jsonString = JSON.toJSONString(jsonObject);
        System.out.println("json对象转字符串 jsonString: "+jsonString);

        // 三, 获取key的值
        // 常用的成员方法:
        // 获取Object类型的值:public Object get(Object key)
        // 获取JSONObject类型的值:public JSONObject getJSONObject(String key)
        // 获取String类型的值:public String getString(String key)
        // 获取Integer类型的值:public Integer getInteger(String key)
        // 获取 二, 步中的 jsonStr 中的值。jsonObject对象 二,步中已经实例化
        Object obj=jsonObject.get("biz_data"); // 可以获取 msg 的值
        System.out.println("--- 一, 获取biz_data对象的值: "+obj);
        JSONObject jObject=jsonObject.getJSONObject("biz_data"); // 获取 msg 的值报错
        System.out.println("--- 二, 获取biz_data对象的值: "+jObject);
        String msg=jsonObject.getString("msg"); //可以获取 biz_data 对象为一个字符串输出
        System.out.println("--- 三, 获取msg对象的值: "+msg);
        int code=jsonObject.getInteger("code");
        System.out.println("--- 四, 获取code对象的值: "+code);

        // 四, 反序列化:将可供传输的数据格式转化为对象。
        // 根据 二,步中jsonStr 的Key 创建实体对象 Response,Biz_data
        // 将 二,步中 jsonStr 转化为 Response 实体类
        Response response=JSONObject.parseObject(jsonStr,Response.class);
        // 获取 jsonStr中 data的值(对象).转化为 JSONObject 对象
        Object dataObject=response.getBiz_data().getData();
        JSONObject jsonObject2 = JSONObject.parseObject(dataObject.toString());
        System.out.println("-=-==-=-=-=jsonObject2: "+jsonObject2);
        //打印出来的结果为:{"list":[{"aa003":15,"aa002":"张三","aa001":10004},{"aa003":20,"aa002":"李四","aa001":10005}]}

        // 五, list列表遍历
        // 成员方法:JSONArray parseArray(String text)
        // 以String 字符串获 jsonStr中resultData,jsonObject2对象在 四,步中已实力化
        String jsonstr2=jsonObject2.getString("resultData");
        /**
         * 处理方式一, 转换为 JSONObject 对象
         */
        JSONObject jsonObject3 = JSONObject.parseObject(jsonstr2);
        // 转换为 JSONArray 对象
        JSONArray jsonlist = JSONArray.parseArray(jsonObject3.getString("list"));
        System.out.println("-----====jsonlist:"+jsonlist); // 打印出数组
        // 遍历数组
        for (int i = 0; i < jsonlist.size(); i++) {
            // 获取 list 列表中的对象
            JSONObject liobj = jsonlist.getJSONObject(i);
            System.out.println("----liobj:"+liobj); // 打印对象
            System.out.println(liobj.getInteger("aa003")+";"+liobj.getString("aa002")+";"+liobj.getInteger("aa001")); // 打印对象中的值
        }
        /**
         * jsonObject2={"resultData":{"list":[{"aa003":15,"aa002":"张三","aa001":10004},{"aa003":20,"aa002":"李四","aa001":10005}]}}
         * 处理方式二, 将 resultData 转换为实体对象 ReList, 取出 list 处理. 在 ReList实体中添加了 list属性对应Json的 key list
         */
        // 创建 ReList 实体类,和 Prens(用于 反序列化 jsonStr中的resultData中的list列表里的对象)实体类
        ReList respList=jsonObject2.getObject("resultData",ReList.class); // 反序列化,转化为实体类对象
        System.out.println("respList.getList():"+respList.getList());
        // 转换为 JSONArray 对象
        JSONArray arryObj = JSONArray.parseArray(respList.getList().toString());
        List<Prens>  PrenList= arryObj.toJavaList(Prens.class); // 使用 JSONArray 的 toJavaList() 方法,转化为 list
        for (Prens pren:PrenList) { //迭代集合
            System.out.println(pren.getAa001()+"||"+pren.getAa002()+"||"+pren.getAa003());
        }

    }
}

示例工程名:readinglist

Maven引入jar包,pom.xml文件:

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.83</version>
        </dependency>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值