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;伴随着计算机硬件的更…

方法区元空间实现之jdk7和8字符串常量池、运行时常量池、静态变量到底在哪?

方法区&#xff08;落地实现jdk7永久代&#xff0c;jdk8元空间&#xff09;&#xff0c;元空间并不在虚拟机中&#xff0c;而是使用本地内存&#xff0c;它和堆在逻辑上是连续的&#xff0c;但在物理上是不连续的&#xff0c;所以也叫非堆。 1、此区域是线程共享的。储存已加载…

mysql force index报错_新特性解读 | MySQL 8.0 索引特性4-不可见索引

MySQL 8.0 实现了索引的隐藏属性。当然这个特性很多商业数据库早就有了&#xff0c;比如ORACLE&#xff0c;在11g中就实现了。我来介绍下这个小特性。介绍INVISIBLE INDEX&#xff0c;不可见索引或者叫隐藏索引。就是对优化器不可见&#xff0c;查询的时候优化器不会把她作为备…

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

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

python内置函数详解总结篇_Python内置函数详解——总结篇

数学运算(7个)类型转换(24个)序列操作(8个)对象操作(7个)反射操作(8个)变量操作(2个)交互操作(2个)文件操作(1个)编译执行(4个)装饰器(3个)数学运算abs&#xff1a;求数值的绝对值>>> abs(-2)2divmod&#xff1a;返回两个数值的商和余数>>> divmod(5,2)(2, 1…

Java多线程中static变量的使用

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

scanf 接收 空格 输入_如何允许使用scanf输入空格?

人们(尤其是初学者)不应该使用scanf(“&#xff05;s”)或gets()或任何其他没有缓冲区溢出保护的函数&#xff0c;除非你确定输入总是一个特定的格式甚至不是)。记住&#xff0c;scanf代表“扫描格式化”&#xff0c;并且珍贵的格式比用户输入的数据少。如果您对输入数据格式具…

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中保证线程安全的三板斧

前言 现在&#xff0c;如果要使用 Java 实现一段线程安全的代码&#xff0c;大致有 synchronized 、 java.util.concurrent 包等手段。虽然大家都会用&#xff0c;但却不一定真正清楚其在 JVM 层面上的实现原理&#xff0c;因此&#xff0c;笔者在查阅了一些资料后&#xff0c…

mysql oa数据库设计_OA项目1:环境搭建之数据库创建与环境添加

首注&#xff1a;本学习教程为传智播客汤阳光讲师所公布的免费OA项目视频我的文字版实践笔记&#xff0c;本人用此来加强巩固自己开发知识&#xff0c;如有网友转载&#xff0c;请注明。谢谢。一 指定数据库&#xff1a;Mysqldatabase&#xff1a;oa建库语句&#xff1a;crea…

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

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

python用pip安装wordcloud_如何在python3.7中使用pip安装wordcloud

我一直试图在windows10上pip安装python3.7的wordcloud&#xff0c;但我一直收到这个错误消息&#xff0c;我不太理解&#xff0c;也无法修复。在正在为wordcloud运行setup.py安装&#xff1a;已完成&#xff0c;状态为“error”Complete output from command "c:\program …

分布式系统全局唯一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…

分布式全局唯一ID的实现

分布式全局唯一ID的实现 前言 上周末考完试&#xff0c;这周正好把工作整理整理&#xff0c;然后也把之前的一些素材&#xff0c;整理一番&#xff0c;也当自己再学习一番。 一方面正好最近看到几篇这方面的文章&#xff0c;另一方面也是正好工作上有所涉及&#xff0c;所以决…

mysql多个分类取n条_MySQL获取所有分类和每个分类的前N条记录

MySQL获取所有分类和每个分类的前N条记录。比如有文章表 test(Id,type,tiem)&#xff0c;现在要用SQL找出每种类型中时间最新的前N个数据组成的集合&#xff0c;一段不错的代码&#xff0c;留存备用。SELECT a1.* FROM test a1INNER JOIN (SELECT a.type,p.time FROM test aLEF…

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

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