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

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

java解析多层嵌套json字符串的更多相关文章

  1. 【Java_Spring】java解析多层嵌套json字符串

    java解析多层嵌套json字符串    

  2. java解析复杂的json字符串

    Java解析Json字符串--复杂对象(方法一)   { "name": "三班", "students": [ { "age&q ...

  3. Gson 解析多层嵌套JSON数据

    http://stackoverflow.com/questions/14139437/java-type-generic-as-argument-for-gson

  4. JAVA 解析复杂的json字符串

    转自:https://blog.csdn.net/lovelovelovelovelo/article/details/73614473String parameter = { success : 0 ...

  5. python中jsonpath模块,解析多层嵌套的json数据

    1. jsonpath介绍用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, ...

  6. Qt平台下使用QJson解析和构建JSON字符串

    前言 上一篇介绍了C语言写的JSON解析库cJSON的使用:使用cJSON库解析和构建JSON字符串 本篇文章介绍,Qt开发环境下QJson库的使用示例,JSON解析配合API接口,就可以实现一些有趣 ...

  7. ASP.NET提取多层嵌套json数据的方法

    本文实例讲述了ASP.NET利用第三方类库Newtonsoft.Json提取多层嵌套json数据的方法,具体例子如下. 假设需要提取的json字符串如下: {"name":&quo ...

  8. 详解ASP.NET提取多层嵌套json数据的方法

    本篇文章主要介绍了ASP.NET提取多层嵌套json数据的方法,利用第三方类库Newtonsoft.Json提取多层嵌套json数据的方法,有兴趣的可以了解一下. 本文实例讲述了ASP.NET利用第三 ...

  9. 使用cJSON库解析和构建JSON字符串

    使用cJSON库解析和构建JSON字符串 前言 其实之前的两篇博文已经介绍了json格式和如何使用cJSON库来解析JSON: 使用cJSON库解析JSON JSON简介 当时在MCU平台上使用时,会 ...

随机推荐

  1. Git 深度学习填坑之旅二(文件三种状态、打标签)

    0x01 三种状态 Git 有三种状态,你的文件可能处于其中之一: 已提交(committed).已修改(modified)和已暂存(staged). 已提交表示数据已经安全的保存在本地数据库中. 已 ...

  2. HttpClient 应用案例揭破应用Discuss论坛登录

    闲来无事,写了一个对discuss论坛登录的案例,初次上场按照以前的惯例没成功,见过抓包分析discuss论坛成功完成,废话不多说 直接上代码. 1:winform 做客户端,添加HttpClient ...

  3. python——字符编码

    Unicode 是字符集 UTF-8 是编码规则 Unicode:给每一个字符分配一个唯一的ID(又称码位). 编码规则:将码位转换为字节序列的规则. 1.什么是字符编码:字符翻译成数字,所遵循的标准 ...

  4. 8.聚集函数 ---SQL

    一.AVG()函数 A VG()通过对表中行数计数并计算其列值之和,求得该列的平均值.A VG()可用来返回所有列的平均值,也可以用来返回特定列或行的平均值. 警告:只用于单个列 AVG()只能用来确 ...

  5. [Android]《Android艺术开发探索》第一章读书笔记

    1. 典型情况下生命周期分析 (1)一般情况下,当当前Activity从不可见重新变为可见状态时,onRestart方法就会被调用. (2)当用户打开新的Activity或者切换到桌面的时候,回调如下 ...

  6. java课后思考题(六)

    1.使用Files. walkFileTree()找出指定文件夹下所有扩展名为.txt和.java的文件. import java.io.IOException;import java.nio.fil ...

  7. 爱上MVC~Web.Config的Debug和Release版本介绍

    回到目录 对于web.config来说,我们不会陌生,主要对站点进行相关参数的配置,当它被修改后,IIS里对应的应用程序池会被重启,而对于config里的一些配置我们一般使用比较多的是数据连接串con ...

  8. C#学习笔记:foreach原理

    这篇随笔是对上一篇随笔C#关键字:yield的扩展. 关于foreach 首先,对于 foreach ,大家应该都非常熟悉,这里就简单的描述下. foreach 语句用于对实现  System.Col ...

  9. Model中的验证规则

    一.能够使用Model的Attribute进行服务端数据验证 本文目录 一.概述 二.MVC提供的常用上下文 三.自定义正则表达式验证 一.概述 为了确保数据的安全性,由Client发送到服务端的每一 ...

  10. cocos的Director、Scence、Layer(一)---摘自于官方文档

    基本结构图(重要) Director: 有那些作用? OpenGL ES的初始化,场景的转换,游戏暂停继续的控制,世界坐标和GL坐标之间的切换,对节点(游戏元素)的控制,游戏数据的保存调用,屏幕尺寸的 ...