我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java多层嵌套JSON类型数据的方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java多层嵌套JSON类型数据的方法

本篇内容介绍了“Java多层嵌套JSON类型数据的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

多层嵌套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);        }

Java多层嵌套JSON类型数据的方法

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

“Java多层嵌套JSON类型数据的方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java多层嵌套JSON类型数据的方法

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

下载Word文档

猜你喜欢

Java多层嵌套JSON类型数据的方法

本篇内容介绍了“Java多层嵌套JSON类型数据的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!多层嵌套JSON类型数据解析简单来说:“
2023-06-29

json多层嵌套转化实体类对象的方法是什么

要将多层嵌套的JSON转化为实体类对象,可以使用以下方法:1. 创建对应的实体类对象,包括多层嵌套的属性。2. 使用JSON解析库(如Jackson、Gson等)将JSON字符串解析为一个Map对象。3. 遍历Map对象,取出每个键值对。对
2023-08-12

Android利用Gson解析嵌套多层的Json的简单方法

首先先讲一个比较简单点的例子(最简单的我就不讲啦,网上很多),帮助新手理解Gson的使用方法: 比如我们要解析一个下面这种的Json:String json = {"a":"100", "b":[{"b1":"b_value1","b2":
2022-06-06

mysql多层嵌套查询的方法是什么

在MySQL中,多层嵌套查询可以通过子查询或联合查询来实现。以下是两种常用的多层嵌套查询方法:使用子查询:SELECT column1, column2FROM table1WHERE column1 IN (SELECT column
mysql多层嵌套查询的方法是什么
2024-04-11

无法分解 Spark 数据框中的嵌套 JSON

问题内容我是 spark 新手。我试图展平数据框,但未能通过“爆炸”做到这一点。原始数据框架构如下:id|approvaljson1|[{"approvertype":"1st line manager","status":"app
无法分解 Spark 数据框中的嵌套 JSON
2024-02-11

Android Fragment多层嵌套重影问题的解决方法

1解决bug的思想: //step1:当bug被发现(排除极低偶然性,单次性,开发工具导致) //step2:根据经验判断bug的重现场景,多次测试,直到精准的定位bug //step3:根据重现场景找到对应的代码 //step4:分析区域
2022-06-06

Python多层嵌套list的递归处理方法(推荐)

问题:用Python处理一个多层嵌套list['and', 'B', ['not', 'A'],[1,2,1,[2,1],[1,1,[2,2,1]]], ['not', 'A', 'A'],['or', 'A', 'B' ,'A'] , '
2022-06-04

java双层循环嵌套优化的方法有哪些

在优化双层循环嵌套时,可以考虑以下几种方法:1. 减少循环次数:通过分析代码逻辑,尽量减少内部循环的次数。例如,如果内部循环中的某些操作只需要在特定条件下执行,可以将这些操作放在外层循环的条件判断中,从而避免不必要的内部循环。2. 使用并行
2023-09-13

PHP无法解析嵌套的JSON数据如何解决

本篇内容主要讲解“PHP无法解析嵌套的JSON数据如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP无法解析嵌套的JSON数据如何解决”吧!JSON是一种轻量级的数据交换格式,通常用于
2023-07-05

rust解决嵌套——Option类型的map和and_then方法的使用

这篇文章主要介绍了rust解决嵌套——Option类型的map和and_then方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-02-04

java数据类型转换的方法

这篇文章主要讲解了“java数据类型转换的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java数据类型转换的方法”吧!自动类型转换:主要指小类型到大类型的转换。 即强制类型转换:主要指
2023-06-19

Android中Fragment多层嵌套时onActivityResult无法正确回调问题的解决方法

前言:Fragment也可以使用startActivityForResult方法去打开一个Activity,然后在其onActivityResult方法中处理结果,可是当Fragment嵌套的时候,由于FragmentActivity的BU
2022-06-06

如何在 Hyperledger Fabric 上的嵌套结构上处理复杂数据类型?

编程网今天将给大家带来《如何在 Hyperledger Fabric 上的嵌套结构上处理复杂数据类型?》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给
如何在 Hyperledger Fabric 上的嵌套结构上处理复杂数据类型?
2024-04-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录