https://blog.csdn.net/qq_34309663/article/details/80508125

java如何解析复杂的json数据
关于json处理的包有好几个,比如jackson、Gson、Fastjson。Gson是谷歌做的,功能强大;Fastjson是阿里巴巴做的,性能更快。具体用哪个,开心就好。我这里两个都没用,用的是java的一个类库—json-lib。如果你用的是maven构建的项目,添加依赖请注意加上JDK版本15,详情请戳这里
ok,多的不说了,让我们直接来解析一个复杂的json数据吧,如下:

String weather = {
"HeWeather6": [
{
"basic": {
"cid": "CN101010100",
"location": "北京",
"parent_city": "北京",
"admin_area": "北京",
"cnty": "中国",
"lat": "39.90498734",
"lon": "116.40528870",
"tz": "8.0"
},
"daily_forecast": [
{
"cond_code_d": "103",
"cond_code_n": "101",
"cond_txt_d": "晴间多云",
"cond_txt_n": "多云",
"date": "2017-10-26",
"hum": "57",
"pcpn": "0.0",
"pop": "0",
"pres": "1020",
"tmp_max": "16",
"tmp_min": "8",
"uv_index": "3",
"vis": "16",
"wind_deg": "0",
"wind_dir": "无持续风向",
"wind_sc": "微风",
"wind_spd": "5"
},
{
"cond_code_d": "101",
"cond_code_n": "501",
"cond_txt_d": "多云",
"cond_txt_n": "雾",
"date": "2017-10-27",
"hum": "56",
"pcpn": "0.0",
"pop": "0",
"pres": "1018",
"tmp_max": "18",
"tmp_min": "9",
"uv_index": "3",
"vis": "20",
"wind_deg": "187",
"wind_dir": "南风",
"wind_sc": "微风",
"wind_spd": "6"
},
{
"cond_code_d": "101",
"cond_code_n": "101",
"cond_txt_d": "多云",
"cond_txt_n": "多云",
"date": "2017-10-28",
"hum": "26",
"pcpn": "0.0",
"pop": "0",
"pres": "1029",
"tmp_max": "17",
"tmp_min": "5",
"uv_index": "2",
"vis": "20",
"wind_deg": "2",
"wind_dir": "北风",
"wind_sc": "3-4",
"wind_spd": "19"
}
],
"status": "ok",
"update": {
"loc": "2017-10-26 23:09",
"utc": "2017-10-26 15:09"
}
}
]
}

这里请先将json数据转换成json字符串,直接.toString()即可
解析之前,先简单分析一下该json的结构:
首先,最外层是一个{},里面只有一个key是"HeWeather6",对应的value是[],显然是一个数组;
然后,第二层也就是第一层的value。该层由一个{}组成,{}里面有4对key-value,分别是:

"basic": {...}
"daily_forecast" : [...]
"status":"ok"
"upate": {...}

第3对数据就不用多说了,第1和第4对数据也很清晰了,key对应的value都是简单的json数据;
所以,唯一需要再往里分析的就是第2对数据了,其对应的value是[],显然又是一个数组。数组里面也很明了了,也都是简单的json数据。
ps:我这里简单的json数据,指的是key-value都是简单的字符串,没有其他复杂的数据结构。
到此,分析完毕!哇哦,是不是发现解析复杂的json数据就像剥洋葱一样,一层一层的往里剥,其实也很简单!只要学会了分析,有点耐心,就算再复杂的json数据也能把它给解析出来~
最后,上代码,如下(解释我全都会写在注释里面,就不再解释什么啦):

JSONObject jsonObject = JSONObject.fromObject(weather);
//获取第二层的数组,将其转换成JSONArray,对应的key为HeWeather6
JSONArray jsonArray = jsonObject.getJSONArray("HeWeather6");

//获取JSONArray 里面的数据,因为jsonArray里面只有一个数据(一个{}),所以获取value值的角标为0
JSONObject jsonObject2 = jsonArray.getJSONObject(0);

//获取4对数据的value,这里先获取最简单的第3对数据的值 打印"three"可得 -> ok
String three= jsonObject2.get("status").toString();

//然后获取第1对数据的值,先获取对应的json 然后获取json里面的value值
JSONObject one = jsonObject2.getJSONObject("basic");
String oneCid = two.get("cid").toString();

//打印oneCid可得 -> CN101010100 其他以此类推,第4对数据同理,就不再赘述了
//最后获取第2对数据的value值 思路:先获取数组,然后遍历,分别拿到里面的值
JSONArray twos = jsonObject2.getJSONArray("daily_forecast");
JSONObject two = null;
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
for (int i = 0; i < twos.size(); i++) {
two = twos.getJSONObject(i);
Map<String, String> map = new HashMap<String, String>();
map.put("天气情况", twos.get("cond_txt_d").toString());
map.put("最高温度", twos.get("tmp_max").toString());
map.put("风力情况", twos.get("wind_sc").toString());
list.add(map);
}
System.out.println(list.toString());

完成!!!

java遍历复杂json字符串获取想要的数据的更多相关文章

  1. JackSon将java对象转换为JSON字符串

    JackSon可以将java对象转换为JSON字符串,步骤如下: 1.导入JackSon 的jar包 2.创建ObjectMapper对象 3.使用ObjectMapper对象的writeValueA ...

  2. java对象与Json字符串之间的转化(fastjson)

    1. 首先引入jar包 在pom.xml文件里加入下面依赖: <dependency> <groupId>com.alibaba</groupId> <art ...

  3. (后端)JackSon将java对象转换为JSON字符串(转)

    转载小金金金丶园友: JackSon可以将java对象转换为JSON字符串,步骤如下: 1.导入JackSon 的jar包 2.创建ObjectMapper对象 3.使用ObjectMapper对象的 ...

  4. Java基础97 json插件的使用(java对象和json字符串对象之间的转换)

    1.需要用到的包 2.实例 实体类 people package com.shore.entity; /** * @author DSHORE/2019-4-19 * */ public class ...

  5. Java基础-处理json字符串解析案例

    Java基础-处理json字符串解析案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 作为一名开发人员,想必大家或多或少都有接触到XML文件,XML全称为“extensible ...

  6. fastjson将java list转为json字符串

    1.直接用fastjson的静态方法string JSON.toJSONString(list)方法就行,JSON.toJSONString(list)将java list转为json字符串. 2.t ...

  7. java对象与json字符串的互相转换

    java对象与json字符串的互相转换 1.采用 net.sf.json.JSONObject maven依赖包: <dependency> <groupId>net.sf.j ...

  8. java对象转为json字符串

    1.使用fastjson开源json工具类库 2.java类未添加get()和set()方法,java对象初始化时,使用fastjson解析,得到的json字符串有时为空{} 3.Java对象转为js ...

  9. Java对象与Json字符串的转换

    Java对象与Json字符串的转换 JSON是一种轻量级的数据交换格式,常用于前后端的数据交流 后端 : 前端 Java对象 > JsonString Java对象 < jsonStrin ...

随机推荐

  1. 再探go modules:使用与细节

    还有半个月go1.12就要发布了.这是首个将go modules纳入正式支持的稳定版本. 距离go modules随着go1.11正式面向广大开发者进行体验也已经过去了半年,这段时间go module ...

  2. Java开发笔记(六十七)清单:ArrayList和LinkedList

    前面介绍了集合与映射两类容器,它们的共同特点是每个元素都是唯一的,并且采用二叉树方式的类型还自带有序性.然而这两个特点也存在弊端:其一,为啥内部元素必须是唯一的呢?像手机店卖出了两部Mate20,虽然 ...

  3. 设计模式之Factory工厂模式的好处

    最最直观的好处就是吹牛逼,看着要比普通创建对象要屌 好看 一般情况下,我们创建对象使用的是new. Sample sample=new Sample(); 然而,实际情况会比这样复杂的多,比如说 Sa ...

  4. springboot之配置文件

    springboot在加载配置文件的时候是有先后顺序的,了解加载配置文件的先后顺序,可以减少编写程序出现错误 1 springboot加载配置文件的先后顺序如下: SpringApplication将 ...

  5. Asp.Net MVC WebAPI的创建与前台Jquery ajax后台HttpClient调用详解

    1.什么是WebApi,它有什么用途? Web API是一个比较宽泛的概念.这里我们提到Web API特指ASP.NET MVC Web API.在新出的MVC中,增加了WebAPI,用于提供REST ...

  6. 工程造价数据服务云平台(造价BIM)

    为响应招标人的<ZQH工程造价数据平台>的技术邀约,特作以下陈述. 经过多次沟通和对招标文件的理解,招标人通过软件平台建立和使用人员库.项目库.材料设备价格库.数据库等四库的真实需求,本着 ...

  7. 集成Android人脸识别demo分享

    本应用来源于虹软人工智能开放平台,人脸识别技术工程如何使用? 1.下载代码 git clone https://github.com/andyxm/ArcFaceDemo.git 2.下载虹软人脸识别 ...

  8. idea连接服务器上传jar并运行

    .打开idea tools-deployment-configuration..                                   .打开如图 点击 + 号           .如 ...

  9. 推荐一款MongoDB的客户端管理工具--nosqlbooster

    今天给大家推荐一款MongoDB的客户端工具--nosqlbooster,这个也是我工作中一直使用的连接管理MongoDB的工具.这个工具还有个曾用名--mongobooster.nosqlboost ...

  10. 自己手写一个SpringMVC 框架

    一.了解SpringMVC运行流程及九大组件 1.SpringMVC 的运行流程   · 用户发送请求至前端控制器DispatcherServlet · DispatcherServlet收到请求调用 ...