复杂的json分析
在复杂的JSON数据的格式中,往往会对JSON数据进行嵌套,这样取值会比之前的取值稍微复杂一点,但是只要思路清晰,其实取法还是一样的。就跟if else语句一样,如果if中套if,if中再套if,写的规范了还行,要是代码格式不规范,那我们肯定也看着麻烦。所以啊,对于json嵌套,只要记住符号“:”前是键,符号后是值大括号成对找,一层层剥开,就清楚了。 举个例子说明,如下:
从外到里看,例子中就是一个数组,数组里面是两个json格式的字符串。这样分析思路就清晰多了。
例如以下的嵌套JSON数据:
- {
- "resultcode":"200",
- "reason":"成功的返回",
- "result":{
- "company":"顺丰",
- "com":"sf",
- "no":"575677355677",
- "list":[
- {
- "datetime":"2013-06-25 10:44:05",
- "remark":"已收件",
- "zone":"台州市"
- },
- {
- "datetime":"2013-06-25 11:05:21",
- "remark":"快件在 台州 ,准备送往下一站 台州集散中心 ",
- "zone":"台州市"
- }
- ],
- "status":1
- },
- "error_code":0
- }
那么这种多重嵌套的JSON数据应该从何入手?
道理很简单,每一层都当作是一个简单JSON数据,我们来分析一下:
这里的嵌套JSON数据,我们可以先看第一层,其实就是如下:
- {
- "resultcode":"200",
- "reason":"成功的返回",
- "error_code":0
- }
那么第二层就是在第一层的里面,其实第二层也可以看做是单独的一层,可以看做是这样的:
- {
- "result":{
- "company":"顺丰",
- "com":"sf",
- "no":"575677355677",
- "status":1
- }
- }
接下来最内的一层是JSONArray,对于这层,我们可以看成是数组的形式。
分析完上面复杂的JSON,知道怎么获取需要的值了吗?
根据分析的思路,我们来一一获取,Java代码如下:
package com.json; import net.sf.json.JSONArray;
import net.sf.json.JSONObject; public class JsonObjectAndJsonArrayDemo {
public static void main(String[] args){
//复杂的json数据
String jsonStr = "{\"resultcode\":\"200\",\"reason\":\"成功的返回\",\"result\":{\"company\":\"顺丰\",\"com\":\"sf\","
+ "\"no\":\"575677355677\",\"list\":[{\"datetime\":\"2013-06-25 10:44:05\",\"remark\":\"已收件\",\"zone\":\"台州市\"},"
+ "{\"datetime\":\"2013-06-25 11:05:21\",\"remark\":\"快件在 台州 ,准备送往下一站 台州集散中心 \",\"zone\":\"台州市\"}],\"status\":1},"
+ "\"error_code\":0}";
JSONObject json = JSONObject.fromObject(jsonStr); //得到整个json串
System.out.println("resultcode:"+json.getString("resultcode")); //根据key得到value:200
System.out.println("reason:"+json.getString("reason")); //根据key得到value:成功的返回 //当遇到result时,也是将它当成一个整体串
System.out.println("company:"+JSONObject.fromObject(json.getString("result")).getString("company"));
System.out.println("com:"+JSONObject.fromObject(json.getString("result")).getString("com"));
System.out.println("no:"+JSONObject.fromObject(json.getString("result")).getString("no")); //当遇到再次嵌套时,此时的list是一个JSONArray,所以需要将其当作数组的形式处理,其实还是一个串
//get(i)以下标为主,里面的东西,其实也是一个json的形式数据,你可以不看外面怎么嵌套,按道理只当成单单一个json串处理即可
System.out.println("list(0).datetime:"+JSONObject.fromObject(JSONArray.fromObject(JSONObject.fromObject(json.getString("result")).getString("list")).get(0)).getString("datetime")); System.out.println("list(0).remark:"+JSONObject.fromObject(JSONArray.fromObject(JSONObject.fromObject(json.getString("result")).getString("list")).get(0)).getString("remark")); System.out.println("list(0).zone:"+JSONObject.fromObject(JSONArray.fromObject(JSONObject.fromObject(json.getString("result")).getString("list")).get(0)).getString("zone")); System.out.println("list(1).datetime:"+JSONObject.fromObject(JSONArray.fromObject(JSONObject.fromObject(json.getString("result")).getString("list")).get(1)).getString("datetime")); System.out.println("list(1).remark:"+JSONObject.fromObject(JSONArray.fromObject(JSONObject.fromObject(json.getString("result")).getString("list")).get(1)).getString("remark")); System.out.println("list(1).zone:"+JSONObject.fromObject(JSONArray.fromObject(JSONObject.fromObject(json.getString("result")).getString("list")).get(1)).getString("zone")); System.out.println("status:"+JSONObject.fromObject(json.getString("result")).getString("status")); System.out.println("reason:"+json.getString("error_code"));
}
}
复杂的json分析的更多相关文章
- XML,Object,Json分析转换Xstream采用
XML,Object,Json转换之浅析Xstream的使用 请尊重他人的劳动成果,转载请注明出处:XML,Object,Json转换之浅析Xstream的使用 XStream的是一个简单的库.主要用 ...
- Android中的应用——谷歌官方Json分析工具Gson使用
一个.Gson基本介绍 Gson(又称Google Gson)是Google公司公布的一个开放源码的Java库.主要用途为串行化Java对象为JSON字符串,或反串行化JSON字符串成Java对象. ...
- JSON 分析数据格式
2014年4月26日本10:55:15 从三月初开始,并JSON战斗.学校不教怎样做,己..大规模的搜索啊.发表这篇文章,喜欢我和不知道如何开始的新手! 和 XML 如.JSON 也是基于纯文本数据格 ...
- [转]php返回json数据中文显示的问题
转自 : http://blog.csdn.net/superbirds/article/details/8091910 解决方法: <?php function Notice(){ ...
- js JSON对象属性
json对象是是一种用于原生json分析的对象,无法对其进行构造函数调用,用java术语 来说,它相当于能够直接使用类方法的工具类JSON对象的属性parse(text[,reviver]);对参数t ...
- Qt中使用Json
Qt中使用Json需要一下几个类: QJsonValue 代表了json格式中的一个值 QJsonObject 代表了json格式的一个对象 QJsonArra ...
- php json数据处理中文编码
<?php function Notice(){ include './include/conn.php'; //数据库链接文件 $sql_notice = mysql_query('SELEC ...
- npm install WARN package.json not exists
npm install WARN package.json not exists: D:\ProData\package.json 一.总结 一句话总结: 出现这样的原因一般是没有切换到指定的目录下, ...
- docker:搭建ELK 开源日志分析系统
ELK 是由三部分组成的一套日志分析系统, Elasticsearch: 基于json分析搜索引擎,Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片 ...
随机推荐
- 实验吧编程题python
网址:http://ctf5.shiyanbar.com/jia 之后第一步就是刷新一下网页,发现给的公式会变,(废话,要不直接算数不就行了...)但是格式不会变. 所以那就暴力一点好了,我们看一下这 ...
- css常用样式属性详细介绍
对于初学css的来说,肯定会觉得这么多样式不好记,而且记住了也容易忘,其实刚开始我们不用去记这么多的样式,确实是记了也会忘,刚开始只需记住一些常用的就可以了,然后在慢慢的使用过程当中接触并学习一些高级 ...
- 插头DP(基于连通性状态压缩的动态规划问题)(让你从入门到绝望)
今天,我,Monkey king 又为大家带来大(ju)佬(ruo)的算法啦!--插头DP 例题(菜OJ上的网址:http://caioj.cn/problem.php?id=1489): 那么,这道 ...
- 12、K最近邻算法(KNN算法)
一.如何创建推荐系统? 找到与用户相似的其他用户,然后把其他用户喜欢的东西推荐给用户.这就是K最近邻算法的分类作用. 二.抽取特征 推荐系统最重要的工作是:将用户的特征抽取出来并转化为度量的数字,然后 ...
- 再谈js传值和传址
js的传值和传址还是真绕,前回文说道 1.值类型是传值的 2.对象和数组是传址的 这两点通过例子的到了证实 然而还有一种情况没有讨论 即 函数的参数的传值和传址 通过实验,在函数中用一个新对象去覆盖传 ...
- js字符串操作函数
js字符串函数 JS自带函数 concat 将两个或多个字符的文本组合起来,返回一个新的字符串. var a = "hello"; var b = ",world&quo ...
- PHP批量替换MySql数据库中的数据内容
<?php //替换数据库内容类 class replace{ public $dbAddress; //数据库地址 public $dbUser; //数据库用户名 public $dbPwd ...
- 2.爬虫 urlib库讲解 异常处理、URL解析、分析Robots协议
1.异常处理 URLError类来自urllib库的error模块,它继承自OSError类,是error异常模块的基类,由request模块产生的异常都可以通过这个类来处理. from urllib ...
- python基础训练营05
任务五 时长:2天 1.file a.打开文件方式(读写两种方式) b.文件对象的操作方法 c.学习对excel及csv文件进行操作 2.os模块 3.datetime模块 4.类和对象 5.正则表达 ...
- [Node] Agenda 中文文档 定时任务调度系统[基础篇]
Agenda简介 使用步骤概述 步骤详述 初始化 定义任务 参数说明: 配置任务 参数说明 设置监听 注意事项 Agenda简介 Agenda是一个定时任务管理模块,它将node中的定时任务存储在数据 ...