当前位置: 代码网 > it编程>编程语言>Javascript > 关于json解析多层嵌套并转为对应类(List)

关于json解析多层嵌套并转为对应类(List)

2024年10月15日 Javascript 我要评论
json解析多层嵌套并转为对应类(list)json(随便扒的格式,将就看~){ "code": 1, "message": "查询成功", "data": [ {

json解析多层嵌套并转为对应类(list)

json(随便扒的格式,将就看~)

{
    "code": 1,
    "message": "查询成功",
    "data": [
        {
            "type": 1,
            "question": "地层压力与同井深的淡水静液压力之比称为地层的()。",
            "answer": "1",
            "id": 1,
            "description": "题目描述",
            "answers": [
                {
                    "iscorrect": "1",
                    "answer_name": "a的选项内容"
                },
                {
                    "iscorrect": "0",
                    "answer_name": "b的选项内容"
                },
                {
                    "iscorrect": 0,
                    "answer_name": "c的选项内容"
                },
                {
                    "iscorect": "0",
                    "answer_name": "d的选项内容"
                }
            ]
        },
        {
            "type": 1,
            "question": "起钻时,产生的抽吸压力导致井底压力()。",
            "answer": "1",
            "id": 1,
            "description": "题目描述",
            "answers": [
                {
                    "iscorrect": 1,
                    "answer_name": "a的选项内容"
                },
                {
                    "iscorrect": 0,
                    "answer_name": "b的选项内容"
                },
                {
                    "iscorrect": 0,
                    "answer_name": "c的选项内容"
                },
                {
                    "iscorrect": 0,
                    "answer_name": "d的选项内容"
                }
            ]
        }
    ]
}

关键依赖

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
        <dependency>
            <groupid>com.alibaba</groupid>
            <artifactid>fastjson</artifactid>
            <version>1.2.72</version>
        </dependency>
jsonobject param = testdate();
        jsonobject param1 = testheader("query");
        string rdate = healthserverhandler.getinstance().post(url,param1.tojsonstring(), param.tojsonstring());
        //这个依赖是com.google.code.gson;因为报错原因未知(报错下面图中显示),更换了阿里的依赖
        //recorder<resultvalue<purchaseorder, pageinfo>> recorder = new gson().fromjson(rdate, recorder.class);
        //处理json将类填充,入库
        jsonobject rdatejson = jsonobject.parseobject(rdate);
        //这里获取的是"resultvalue"标签下面“data”这个jsonarray
        jsonarray data = rdatejson.getjsonobject("resultvalue").getjsonarray("data");
        //这里获取的是"resultvalue"标签下面“pageinfo”这个jsonobject
        jsonobject pageinfo = rdatejson.getjsonobject("resultvalue").getjsonobject("pageinfo");
        //purchaseorder 是具体接收类
        list<purchaseorder> purchaseorder = jsonarray.parsearray(data.tostring(),purchaseorder.class);
        pageinfo pageinfo1 = jsonobject.parseobject(pageinfo.tostring(),pageinfo.class);
        //茵pageinfo与purchaseorder并不在同一结构内,需要二次添加
        for (purchaseorder order : purchaseorder) {
            order.setpagecount(pageinfo1.getpagecount());
            order.setpagenum(pageinfo1.getpagenum());
            order.settotal(pageinfo1.gettotal());
            order.setpagesize(pageinfo1.getpagesize());
            service.saveorder(order);
        }

//具体解析  大佬原作网址https://www.cnblogs.com/janson071/p/9646678.html
package jansondemo;

import com.alibaba.fastjson.json;
import com.alibaba.fastjson.jsonarray;
import com.alibaba.fastjson.jsonobject;

public class testjson {
    /**
     * json实际上也是键值对("key":"value")
     * key 必须是字符串,value 可以是合法的 json 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)
     * value如果是字符串,用jsonobj.getstring("key")获取
     * value如果是数  字,用jsonobj.getintvalue("key"),jsonobj.getfloatvalue("key"),jsonobj.getinteger("key")等基本数据类型及其包装类的方法获取
     * value如果是布尔值,用jsonobj.getboolean("key"),jsonobj.getbooleanvalue("key")获取
     * value如果是数  组,用jsonobj.getjsonarray("key")获取
     * value如果是object对象,用jsonobj.get("key"),获取
     * value如果是jsonobject对象,用jsonobj.getjsonobject("key")获取
     */

    /**
     * 该方法用于将已有的json字符串转换为json对象,并取出该对象中相应的key对应的value值
     * 将已有的字符串转换成jsonobject,用json.parseobject(jsonstr)方法
     * json中只要是{}就代表一个jsonobject,[]就代表一个jsonarray
     * 获取jsonobject对象用jsonobject jsonobject.getjsonobject("key")方法
     * 获取jsonarray对象用jsonobject jsonobject.getjsonarray("key")方法
     */

    private static void strwritedtojsonobject() {
        //以下是一个json对象中嵌套一个json子对象
        string myjsonobj = "{\n" +
                "    \"name\":\"runoob\",\n" +
                "    \"alexa\":10000,\n" +
                "    \"sites\": {\n" +
                "        \"site1\":\"www.runoob.com\",\n" +
                "        \"site2\":\"m.runoob.com\",\n" +
                "        \"site3\":\"c.runoob.com\"\n" +
                "    }\n" +
                "}";
        jsonobject jsonobj = json.parseobject(myjsonobj); //将json字符串转换成jsonobject对象
        /***获取jsonobject中每个key对应的value值时,可以根据实际场景中想得到什么类型就分别运用不到的方法***/
        system.out.println(jsonobj.get("name")); //取出name对应的value值,得到的是一个object
        system.out.println(jsonobj.getstring("name")); //取出name对应的value值,得到的是一个string
        system.out.println(jsonobj.getintvalue("alexa")); //取出name对应的value值,得到的是一个int
        system.out.println(jsonobj.get("sites")); //取出sites对应的value值,得到的是一个object
        system.out.println(jsonobj.getstring("sites"));
        system.out.println(jsonobj.getjsonobject("sites")); //取出sites对应的value值,得到一个jsonobject子对象
        system.out.println(jsonobj.getjsonobject("sites").getstring("site2")); //取出嵌套的jsonobject子对象中site2对应的value值,必须用getjsonobject()先获取jsonobject


        /**
         * 以下是一个json对象中包含数组,数组中又包含json子对象和子数组
         */
        string myjsonobj2 = "{\n" +
                "    \"name\":\"网站\",\n" +
                "    \"num\":3,\n" +
                "    \"sites\": [\n" +
                "        { \"name\":\"google\", \"info\":[ \"android\", \"google 搜索\", \"google 翻译\" ] },\n" +
                "        { \"name\":\"runoob\", \"info\":[ \"菜鸟教程\", \"菜鸟工具\", \"菜鸟微信\" ] },\n" +
                "        { \"name\":\"taobao\", \"info\":[ \"淘宝\", \"网购\" ] }\n" +
                "    ]\n" +
                "}";
        jsonobject jsonobj2 = json.parseobject(myjsonobj2); //将json字符串转换成jsonobject对象
        system.out.println(jsonobj2.get("sites"));
        system.out.println(jsonobj2.getstring("sites"));
        system.out.println(jsonobj2.getjsonarray("sites")); //取出sites对应的value值,得到一个jsonoarray对象
        //system.out.println(jsonobj2.getjsonobject("sites")); 不能用该方法,因为sites是一个jsonoarray对象
        //取出json对象中sites对应数组中第一个json子对象的值
        system.out.println(jsonobj2.getjsonarray("sites").getjsonobject(0)); //得到结果:{"name":"google","info":["android","google 搜索","google 翻译"]}
        system.out.println(jsonobj2.getjsonarray("sites").get(0));
        system.out.println(jsonobj2.getjsonarray("sites").getstring(0));
        //取出json对象中sites对应数组中第一个json子对象下面info对应的嵌套子数组值
        system.out.println(jsonobj2.getjsonarray("sites").getjsonobject(0).getjsonarray("info")); //得到结果:["android","google 搜索","google 翻译"]
        //取出json对象中sites对应数组中第一个json子对象下面info对应的嵌套子数组中第二个值
        system.out.println(jsonobj2.getjsonarray("sites").getjsonobject(0).getjsonarray("info").getstring(1)); //得到结果:google 搜索

        //依次取出json对象中sites对应数组中的值
        jsonarray array = jsonobj2.getjsonarray("sites");
        getjsonarrayitem(array);
        //依次取出json对象中sites对应数组中第二个json子对象下面info对应的嵌套子数组值
        jsonarray arr = jsonobj2.getjsonarray("sites").getjsonobject(1).getjsonarray("info");
        getjsonarrayitem(arr);
     }

    /**
     * 手动添加对象到一个jsonobject
     */
    private static void writestrtojsonobject() {
        jsonobject jsonobject = new jsonobject();
        jsonobject.put("name","tom");
        jsonobject.put("age",20);

        jsonarray jsonarray = new jsonarray();
        jsonobject jsonarrayobject1 = new jsonobject();
        jsonarrayobject1.put("name","alibaba");
        jsonarrayobject1.put("info","www.alibaba.com");
        jsonobject jsonarrayobject2 = new jsonobject();
        jsonarrayobject2.put("name","baidu");
        jsonarrayobject2.put("info","www.baidu.com");

        jsonarray.add(jsonarrayobject1);
        jsonarray.add(jsonarrayobject2);

        jsonobject.put("sites",jsonarray);

        system.out.println(jsonobject);
     }

    /**
     * 将字符串转为jsonarray
     */
    private static void strtojsonarray() {
        string arraystr = "[\n" +
                "        {\n" +
                "            \"name\":\"alibaba\",\n" +
                "            \"info\":\"www.alibaba.com\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"name\":\"baidu\",\n" +
                "            \"info\":\"www.baidu.com\"\n" +
                "        }\n" +
                "    ]";

        jsonarray array = json.parsearray(arraystr);
        system.out.println(array);
     }

    /**
     * 依次取出jsonarray中的值
     */
    private static void getjsonarrayitem(jsonarray array) {
        for (int i=0; i<array.size(); i++) {
            system.out.println(array.get(i));
        }
    }

     //测试类
    public static void main(string[] args) {
        strwritedtojsonobject();
        //writestrtojsonobject();
        //strtojsonarray();
    }
}

javabean转jsonobject

string jsonstring=jsonobject.tojsonstring(param);
jsonobject jsonobject=jsonobject.parseobject(jsonstring);

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com