在复杂的JSON数据的格式中,往往会对JSON数据进行嵌套,这样取值会比之前的取值稍微复杂一点,但是只要思路清晰,其实取法还是一样的。就跟if else语句一样,如果if中套if,if中再套if,写的规范了还行,要是代码格式不规范,那我们肯定也看着麻烦。所以啊,对于json嵌套,只要记住符号“:”前是键,符号后是值大括号成对找,一层层剥开,就清楚了。 举个例子说明,如下:

从外到里看,例子中就是一个数组,数组里面是两个json格式的字符串。这样分析思路就清晰多了。

例如以下的嵌套JSON数据:

  1. {
  2. "resultcode":"200",
  3. "reason":"成功的返回",
  4. "result":{
  5. "company":"顺丰",
  6. "com":"sf",
  7. "no":"575677355677",
  8. "list":[
  9. {
  10. "datetime":"2013-06-25 10:44:05",
  11. "remark":"已收件",
  12. "zone":"台州市"
  13. },
  14. {
  15. "datetime":"2013-06-25 11:05:21",
  16. "remark":"快件在 台州 ,准备送往下一站 台州集散中心 ",
  17. "zone":"台州市"
  18. }
  19. ],
  20. "status":1
  21. },
  22. "error_code":0
  23. }

那么这种多重嵌套的JSON数据应该从何入手?

道理很简单,每一层都当作是一个简单JSON数据,我们来分析一下:

这里的嵌套JSON数据,我们可以先看第一层,其实就是如下:

  1. {
  2. "resultcode":"200",
  3. "reason":"成功的返回",
  4. "error_code":0
  5. }

那么第二层就是在第一层的里面,其实第二层也可以看做是单独的一层,可以看做是这样的:

  1. {
  2. "result":{
  3. "company":"顺丰",
  4. "com":"sf",
  5. "no":"575677355677",
  6. "status":1
  7. }
  8. }

接下来最内的一层是JSONArray,对于这层,我们可以看成是数组的形式。

分析完上面复杂的JSON,知道怎么获取需要的值了吗?

根据分析的思路,我们来一一获取,Java代码如下:

  1. package com.json;
  2.  
  3. import net.sf.json.JSONArray;
  4. import net.sf.json.JSONObject;
  5.  
  6. public class JsonObjectAndJsonArrayDemo {
  7. public static void main(String[] args){
  8. //复杂的json数据
  9. String jsonStr = "{\"resultcode\":\"200\",\"reason\":\"成功的返回\",\"result\":{\"company\":\"顺丰\",\"com\":\"sf\","
  10. + "\"no\":\"575677355677\",\"list\":[{\"datetime\":\"2013-06-25 10:44:05\",\"remark\":\"已收件\",\"zone\":\"台州市\"},"
  11. + "{\"datetime\":\"2013-06-25 11:05:21\",\"remark\":\"快件在 台州 ,准备送往下一站 台州集散中心 \",\"zone\":\"台州市\"}],\"status\":1},"
  12. + "\"error_code\":0}";
  13. JSONObject json = JSONObject.fromObject(jsonStr); //得到整个json串
  14. System.out.println("resultcode:"+json.getString("resultcode")); //根据key得到value:200
  15. System.out.println("reason:"+json.getString("reason")); //根据key得到value:成功的返回
  16.  
  17. //当遇到result时,也是将它当成一个整体串
  18. System.out.println("company:"+JSONObject.fromObject(json.getString("result")).getString("company"));
  19. System.out.println("com:"+JSONObject.fromObject(json.getString("result")).getString("com"));
  20. System.out.println("no:"+JSONObject.fromObject(json.getString("result")).getString("no"));
  21.  
  22. //当遇到再次嵌套时,此时的list是一个JSONArray,所以需要将其当作数组的形式处理,其实还是一个串
  23. //get(i)以下标为主,里面的东西,其实也是一个json的形式数据,你可以不看外面怎么嵌套,按道理只当成单单一个json串处理即可
  24. System.out.println("list(0).datetime:"+JSONObject.fromObject(JSONArray.fromObject(JSONObject.fromObject(json.getString("result")).getString("list")).get(0)).getString("datetime"));
  25.  
  26. System.out.println("list(0).remark:"+JSONObject.fromObject(JSONArray.fromObject(JSONObject.fromObject(json.getString("result")).getString("list")).get(0)).getString("remark"));
  27.  
  28. System.out.println("list(0).zone:"+JSONObject.fromObject(JSONArray.fromObject(JSONObject.fromObject(json.getString("result")).getString("list")).get(0)).getString("zone"));
  29.  
  30. System.out.println("list(1).datetime:"+JSONObject.fromObject(JSONArray.fromObject(JSONObject.fromObject(json.getString("result")).getString("list")).get(1)).getString("datetime"));
  31.  
  32. System.out.println("list(1).remark:"+JSONObject.fromObject(JSONArray.fromObject(JSONObject.fromObject(json.getString("result")).getString("list")).get(1)).getString("remark"));
  33.  
  34. System.out.println("list(1).zone:"+JSONObject.fromObject(JSONArray.fromObject(JSONObject.fromObject(json.getString("result")).getString("list")).get(1)).getString("zone"));
  35.  
  36. System.out.println("status:"+JSONObject.fromObject(json.getString("result")).getString("status"));
  37.  
  38. System.out.println("reason:"+json.getString("error_code"));
  39. }
  40. }

  

复杂的json分析的更多相关文章

  1. XML,Object,Json分析转换Xstream采用

    XML,Object,Json转换之浅析Xstream的使用 请尊重他人的劳动成果,转载请注明出处:XML,Object,Json转换之浅析Xstream的使用 XStream的是一个简单的库.主要用 ...

  2. Android中的应用——谷歌官方Json分析工具Gson使用

    一个.Gson基本介绍 Gson(又称Google Gson)是Google公司公布的一个开放源码的Java库.主要用途为串行化Java对象为JSON字符串,或反串行化JSON字符串成Java对象. ...

  3. JSON 分析数据格式

    2014年4月26日本10:55:15 从三月初开始,并JSON战斗.学校不教怎样做,己..大规模的搜索啊.发表这篇文章,喜欢我和不知道如何开始的新手! 和 XML 如.JSON 也是基于纯文本数据格 ...

  4. [转]php返回json数据中文显示的问题

    转自 : http://blog.csdn.net/superbirds/article/details/8091910 解决方法:   <?php    function Notice(){  ...

  5. js JSON对象属性

    json对象是是一种用于原生json分析的对象,无法对其进行构造函数调用,用java术语 来说,它相当于能够直接使用类方法的工具类JSON对象的属性parse(text[,reviver]);对参数t ...

  6. Qt中使用Json

    Qt中使用Json需要一下几个类: QJsonValue            代表了json格式中的一个值 QJsonObject          代表了json格式的一个对象 QJsonArra ...

  7. php json数据处理中文编码

    <?php function Notice(){ include './include/conn.php'; //数据库链接文件 $sql_notice = mysql_query('SELEC ...

  8. npm install WARN package.json not exists

    npm install WARN package.json not exists: D:\ProData\package.json 一.总结 一句话总结: 出现这样的原因一般是没有切换到指定的目录下, ...

  9. docker:搭建ELK 开源日志分析系统

    ELK 是由三部分组成的一套日志分析系统, Elasticsearch: 基于json分析搜索引擎,Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片 ...

随机推荐

  1. 嵌入式框架Zorb Framework搭建五:事件的实现

    我是卓波,我是一名嵌入式工程师,我万万没想到我会在这里跟大家吹牛皮. 嵌入式框架Zorb Framework搭建过程 嵌入式框架Zorb Framework搭建一:嵌入式环境搭建.调试输出和建立时间系 ...

  2. Spark 实践

    1.1 避免使用 GroupByKey   让我们看一下使用两种不同的方式去计算单词的个数,第一种方式使用 reduceByKey, 另外一种方式使用 groupByKey: val words = ...

  3. 可用率map处理

    total_data =[ {'event_current_dealer': '陈铁', 'id__count': 66}, {'event_current_dealer': '丁凯', 'id__c ...

  4. 「日常训练」Common Subexpression Elimination(UVa-12219)

    今天做的题目就是抱佛脚2333 懂的都懂. 这条题目干了好几天,最后还是参考别人的代码敲出来了,但是自己独立思考了两天多,还是有收获的. 思路分析 做这条题我是先按照之前的那条题目(The SetSt ...

  5. CSS3 : transform 与 transform-origin 属性可以使元素样式发生转变

    CSS3 : transform 用于元素样式的转变,比如使元素发生位移.角度变化.拉伸缩小.按指定角度歪斜 transform结合transition可实现各类动画效果 transform : tr ...

  6. Gym101981I Magic Potion(最大流)

    Problem I. Magic Potion There are n heroes and m monsters living in an island. The monsters became v ...

  7. php+Mysql 页面登录代码

    登录界面设置: <?php/** * Created by xx. * User: msi * Date: 2017/10/26 * Time: 18:12 *///session每次用之前都要 ...

  8. 线段树——hdu1166敌兵布阵

    一.题目回顾 题目链接:敌兵布阵 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个 ...

  9. UGUI 代码 动态添加 Event Trigger 的事件

    Additionally, if you need more than just the events provided by default, I'd suggest instead attachi ...

  10. python 注册表重置ie代理 ss使用后的代理恢复

    每次用完ss客户端,浏览器代理都不会改回来,不想手动改,只能用python脚本处理了. import winreg def disableProxy(): proxy = "" x ...