iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java多层嵌套JSON类型数据全面解析
  • 527
分享到

Java多层嵌套JSON类型数据全面解析

2024-04-02 19:04:59 527人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录多层嵌套JSON类型数据解析以下举例数据结构解析代码json解析多层嵌套并转为对应类(List)Json(随便扒的格式,将就看~)关键依赖JAVABEAN转JSONObject多

多层嵌套JSON类型数据解析

简单来说:

“key”:“value” --> 此时value为String
“key":0 --> 此时value为int
“key”:{“k1”:“v1”} --> 此时value为JSONObject
“key”:[v] --> 此时value为JSONArray

以下举例数据结构

{
    "error": 0,
    "status": "success",
    "results": [
        {
            "currentCity": "青岛",
            "index": [
                {
                    "title": "穿衣",
                    "zs": "较冷",
                    "tipt": "穿衣指数",
                    "des": "建议着厚外套加毛衣等服装。年老体弱者宜着大衣、呢外套加羊毛衫。"
                },
                {
                    "title": "紫外线强度",
                    "zs": "中等",
                    "tipt": "紫外线强度指数",
                    "des": "属中等强度紫外线辐射天气,外出时建议涂擦SPF高于15、PA+的防晒护肤品,戴帽子、太阳镜。"
                }
            ]
        }
    ]
}

解析代码

public class Test {
public static void main(String[] args) {
    String s = "{\"error\":0,\"status\":\"success\",\"results\":[{\"currentCity\":\"青岛\",\"index\":[{\"title\":\"穿衣\",\"zs\":\"较冷\",\"tipt\":\"穿衣指数\",\"des\":\"建议着厚外套加毛衣等服装。年老体弱者宜着大衣、呢外套加羊毛衫。\"},{\"title\":\"紫外线强度\",\"zs\":\"最弱\",\"tipt\":\"紫外线强度指数\",\"des\":\"属弱紫外线辐射天气,无需特别防护。若长期在户外,建议涂擦SPF在8-12之间的防晒护肤品。\"}],}]}";
    JSONObject jsonObject = JSONObject.fromObject(s);
    //提取出error为 0
    int error = jsonObject.getInt("error");
    System.out.println("error:" + error);
    //提取出status为 success
    String status = jsonObject.getString("status");
    System.out.println("status:" + status);    
    //注意:results中的内容带有中括号[],所以要转化为JSONArray类型的对象
    JSONArray result = jsonObject.getJSONArray("results");
    for (int i = 0; i < result.size(); i++) {
        //提取出currentCity为 青岛
        String currentCity = result.getJSONObject(i).getString("currentCity");
        System.out.println("currentCity:" + currentCity);
        //注意:index中的内容带有中括号[],所以要转化为JSONArray类型的对象
        JSONArray index = result.getJSONObject(i).getJSONArray("index");
        for (int j = 0; j < index.size(); j++) {
            String title = index.getJSONObject(j).getString("title");
            System.out.println("title:" + title);
            String zs = index.getJSONObject(j).getString("zs");
            System.out.println("zs:" + zs);
            String tipt = index.getJSONObject(j).getString("tipt");
            System.out.println("tipt:" + tipt);
            String des = index.getJSONObject(j).getString("des");
            System.out.println("des:" + des);
        }
    }
}
}

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

在这里插入图片描述


package jansonDemo;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class TestJSON {
    
    
    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对象
        
        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
        
        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);
     }
    
    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);
     }
    
    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);
     }
    
    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);

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

--结束END--

本文标题: Java多层嵌套JSON类型数据全面解析

本文链接: https://www.lsjlt.com/news/164028.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java多层嵌套JSON类型数据全面解析
    目录多层嵌套JSON类型数据解析以下举例数据结构解析代码json解析多层嵌套并转为对应类(List)Json(随便扒的格式,将就看~)关键依赖JAVABEAN转JSONObject多...
    99+
    2022-11-13
  • Java多层嵌套JSON类型数据的方法
    本篇内容介绍了“Java多层嵌套JSON类型数据的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!多层嵌套JSON类型数据解析简单来说:“...
    99+
    2023-06-29
  • java解析多层嵌套json字符串问题
    目录java分别解析下面两个json字符串嵌套(任意层)JSON解析转换为Map源代码java分别解析下面两个json字符串 package jansonDemo; import...
    99+
    2022-11-13
  • Java数据类型的全面剖析
    目录一、int二、long三、double四、float五、char六、byte与short一、int 还记得 C 语言里的 int 吗,C里面的 int 有着无符号与有符号之分 但...
    99+
    2022-11-12
  • 全面剖析java 数据类型与运算符
    目录java的变量和类型基本数据类型——数值型整型浮点型字符型布尔型运算符运算符:|运算符:&运算符:^运算符:~运算符:>>运算符:<<运算符:&g...
    99+
    2022-11-12
  • Redis02 使用Redis数据库(String类型)全面解析
    一 String类型 首先使用启动服务器进程 : redis-server.exe 1. Set   设置Key对应的值为String 类型的value。   例子:向 Redis数据库中插入一条数...
    99+
    2022-06-04
    类型 数据库 Redis
  • java编程数据类型全面详解教程新手必入
    目录前言变量和类型1 整形int2 长整形long3 双精度浮点型(重点)4 单精度浮点型5 字符型6 字节类型7 短整型8 布尔类型9 字符串类型(重点)10 变量的作用域11 变...
    99+
    2022-11-12
  • Java初学者必备:文件处理、数据类型和二维码生成全解析!
    Java是一种广泛使用的编程语言,由于其跨平台、面向对象等特性,被广泛应用于软件开发、Web应用、移动应用等领域。对于Java初学者来说,文件处理、数据类型和二维码生成是必备的知识点。本文将对这三个方面进行全面解析,并穿插演示代码,让读者更...
    99+
    2023-08-15
    文件 数据类型 二维码
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作