java解析多层嵌套json字符串

java解析多层嵌套json字符串

java分别解析下面两个json字符串

img

img

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值,得到的是一个objectSystem.out.println(jsonobj.getString("name")); //取出name对应的value值,得到的是一个StringSystem.out.println(jsonobj.getIntValue("alexa")); //取出name对应的value值,得到的是一个intSystem.out.println(jsonobj.get("sites")); //取出sites对应的value值,得到的是一个objectSystem.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();}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555598.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM中的五大内存区域划分详解

一、快速扫盲 1. JVM是什么 JVM是Java Virtual Machine的缩写&#xff0c;即咱们经常提到的Java虚拟机。虚拟机是一种抽象化的计算机&#xff0c;有着自己完善的硬件架构&#xff0c;如处理器、堆栈等&#xff0c;具体有什么咱们不做了解。目前我们只需要知道想要运行Java文件…

编写并调试一个单道处理系统的作业调度模拟程序_操作系统系列(2):操作系统发展历史...

用户需求的提升和硬件技术的发展&#xff0c;是操作系统发展的必要条件和基础。计算机的发展经历了4个阶段&#xff0c;电子管计算机(1945-1955)、晶体管计算机(1955-1965)、集成电路计算机(1965-1980)、大规模集成电路计算机(1980-至今)。因此&#xff0c;伴随着计算机硬件的更…

关于Java成员变量、局部变量、方法,在JVM的内存空间分配

1、变量类型 2、类的结构 下面是一般类的结构 //类体属性状态&#xff08;即&#xff1a;类体变量方法&#xff09; public class 类名{ //类名最好首字母大写的英文String name; //在方法体外&#xff0c;所以是成员变量//下面是一个main方法(程序入口的主方法)public static…

Java多线程中static变量的使用

Java中 没处理好同步 导致两个线程同时为一个static变量赋值 会导致什么后果&#xff1f; Java中 没处理好同步 导致两个线程同时为一个static变量赋值 会导致什么后果&#xff1f;仅仅是多耗资源还是会引发异常&#xff1f; 不会耗资源 也不会引发异常 而是程序出现逻辑错误,…

Java并发——线程安全

1、线程安全 多个线程对同一个共享变量进行读写操作时可能产生不可预见的结果&#xff0c;这就是线程安全问题。 故线程安全的核心点就是共享变量&#xff0c;只有在共享变量的情况下才会有线程安全问题。这里说的共享变量&#xff0c;是指多个线程都能访问的变量&#xff0c…

vue 功能模块后台可配置_Github14k的Springboot后台管理系统

关注爱编码、挖掘优秀项目。本期给各位带来的一款优质的后台管理系统&#xff1a;EL-ADMIN 后台管理系统。简介该项目由大神elunez一手大打造。它是一个基于 Spring Boot 2.1.0 、 Spring Boot Jpa、 JWT、Spring Security、Redis、Vue的前后端分离的后台管理系统。项目地址&am…

hibernate mysql 时间_使用Hibernate和MySQL创建时间戳和最后更新时间戳

慕斯卡3215842利用本文中的资源以及从不同来源获得的左右信息&#xff0c;我提出了这个优雅的解决方案&#xff0c;创建了以下抽象类import java.util.Date;import javax.persistence.Column;import javax.persistence.MappedSuperclass;import javax.persistence.PrePersist;i…

java 线程安全的原因_java的多线程:java安全问题产生的原因与JMM的关系

一、多线程产生安全问题 1、Java内存模型 共享内存模型指的就是Java内存模型(简称JMM)&#xff0c;JMM决定一个线程对共享变量的写入时,能对另一个线程可见。 从抽象的角度来看&#xff0c;JMM定义了线程和主内存之间的抽象关系&#xff1a; 线程之间的共享变量存储在主内存…

分布式系统全局唯一ID的几种实现方式

现如今可谓是微服务、分布式、IoT&#xff08;物联网&#xff09;横行的时代&#xff0c;作为一名开发者始终还是要保持一定的危机意识&#xff0c;特别是在日常的项目开发中&#xff0c;若是有机会接触到一些关于微服务、分布式下的应用场景&#xff0c;应当硬着头皮、排除万难…

git如何查看缓存区文件内容_详解Git工作区、暂存区、历史记录区以及git reset、git revert、git checkout等撤销命令的区别...

一、可以将git简单的分为三个区域 1、工作区(working directory) 2、暂缓区(stage index) 3、历史记录区(history) 如图&#xff1a;其中git add files 把当前工作目录中的文件放入暂存区域这其实做了两件事&#xff1a; 1、将本地文件的时间戳、长度&#xff0…

Java接口学习(接口的使用、简单工厂、代理模式、接口和抽象类的区别)

前言引入 官方解释&#xff1a;Java接口是一系列方法的声明&#xff0c;是一些方法特征的集合&#xff0c;一个接口只有方法的特征没有方法的实现&#xff0c;因此这些方法可以在不同的地方被不同的类实现&#xff0c;而这些实现可以具有不同的行为&#xff08;功能&#xff0…

最短路径 floyd java_java实现Floyd算法求最短路径

关于无向图的最短路径问题&#xff1a;这个程序输出&#xff1a;最短路径矩阵例如:W[0][5]9 代表vo->v5的最短路径为9W:0 1 3 7 4 91 0 2 6 3 83 2 0 4 1 67 6 4 0 3 24 3 1 3 0 59 8 6 2 5 0package com.xh.Floyd;import java.util.ArrayList;public class Floyd_01 {publi…

SpringBoot 使用 log4j2

一、新建工程 选择一些基础依赖 填写工程名称和项目路径 二、工程配置 修改文件编码格式 设置Java Compiler 修改maven配置文件路径 三、pom.xml的web依赖中排除掉logging依赖&#xff0c;并且引入log4j2依赖 <dependency><groupId>org.springframework.…

springBoot 通过使用log4j2

1.排除 Spring-boot-starter 默认的日志配置 将原本的 spring-boot-starter 改为 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><exclusions><exclusion><groupId>…

SpringBoot默认日志logback配置解析

SpringBoot默认日志logback配置解析 前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候&#xff0c;是带着下面几个问题来查资料的&#xff0c;你呢 如何引入日志&#xff1f;日志输出格式以及输出方式如何配置&#xff1f;代码中如何使用&#xff1f; 正文…

SpringBoot查看和修改依赖的版本

springBoot依赖管理&#xff1a; 1、引入父项目的作用是实现对所有依赖的管理。 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version> &l…

在IDEA中解决jar包冲突的神操作-必看

在开发过程中&#xff0c;经常会遇到导入jar包后jar包冲突的情况&#xff0c;大家也都知道&#xff0c;解决jar包冲突通常都比较麻烦&#xff0c;要找到多余的依赖&#xff0c;把低版本的依赖去掉。而大家通常能搜到IDEA解决jar包冲突的方法&#xff0c;应该是这样的&#xff1…

MySQL保存或更新 saveOrUpdate

1. 引子 在项目开发过程中&#xff0c;有一些数据在写入时候&#xff0c;若已经存在&#xff0c;则覆盖即可。这样可以防止多次重复写入唯一键冲突报错。下面先给出两个MyBatis配置文件中使用saveOrUpdate的示例 <!-- 单条数据保存 --> <insert id"saveOrUpdat…

分布式事务六种解决方案

前言 事务想必大家并不陌生&#xff0c;至于什么是 ACID&#xff0c;也是老生常谈了。不过为了保证文章的完整性确保所有人都听得懂&#xff0c;我还是得先说说 ACID&#xff0c;然后再来介绍下什么是分布式事务和常见的分布式事务包括 2PC、3PC、TCC、本地消息表、消息事务、…

Minor GC、Major GC和Full GC之间的区别

概念&#xff1a; ● 新生代 GC&#xff08;Minor GC&#xff09;&#xff1a;从年轻代空间&#xff08;包括 Eden 和 Survivor 区域&#xff09;回收内存被称为 Minor GC,因为 Java 对象大多都具备朝生夕灭的特性&#xff0c;所以 Minor GC 非常频繁&#xff0c;一般回收速度也…