java遍历复杂json字符串获取想要的数据

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

完成!!!

原文地址:https://www.cnblogs.com/-flq/p/10268064.html

时间: 2024-10-03 22:36:07

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

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

JackSon可以将java对象转换为JSON字符串,步骤如下: 1.导入JackSon 的jar包 2.创建ObjectMapper对象 3.使用ObjectMapper对象的writeValueAsString()方法将java对象转换为JSON对象 这里有个例子: public class Fruit { private String name; private String id; public Customet(String name, String id) { super(); th

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

1. 首先引入jar包 在pom.xml文件里加入下面依赖: <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.51</version> </dependency> 2. 创建一个Person类(方面下面使用) public class Person implements Comp

java对象转为json字符串

1.使用fastjson开源json工具类库 2.java类未添加get()和set()方法,java对象初始化时,使用fastjson解析,得到的json字符串有时为空{} 3.Java对象转为json字符串,初始化时最好添加get()和set()方法,避免错误 原文地址:https://www.cnblogs.com/cty136/p/11521264.html

使用jackson对Java对象与JSON字符串相互转换的一些总结

本文为菠萝大象原创,如要转载请注明出处.http://www.blogjava.net/bolo 代码无真相,为了最简单的说明,我直接上代码. public class User { private String name; private Gender gender; private List<Account> accounts; 省略get和set方法 ... } public enum Gender { MALE, FEMALE } public class Account { priv

java对象和json字符串互转

1.使用fastjson.jar包 2.将字符串转换成List结果集 List<Test> columns = JSON.parseArray("json字符串",Test.class); 3.将字符串转换成java对象 Test test = JSON.parseObject("json字符串",Test.class); 4.将对象转换成json字符 String str = JSON.toJSONString("java对象");

【深入JAVA】将Json字符串转换成Map/List

在阅读的过程中有任何问题,欢迎一起交流 邮箱:[email protected] QQ:1494713801 Java代码 package jsonToMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import net.sf.json.JSONArray; import net.sf.json.JSONObject; /** * 说明 json字符串 转成 Map/List * @aut

Java - 格式化输出JSON字符串的两种方式

目录 1 使用阿里的fastjson 1.1 项目的pom.xml依赖 1.2 Java示例代码 2 使用谷歌的gson 2.1 项目的pom.xml依赖 2.2 Java示例代码 1 使用阿里的fastjson 1.1 项目的pom.xml依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58&l

使用python解析Json字符串-获取Json字符串关键字

1 import json 2 3 data = { 4 "statusCode": 0, 5 "data": { 6 "totoal": "5", 7 "height": "5.97", 8 "weight": "10.30", 9 "age": "3" 10 }, 11 "msg":

java代码解析json对象获取json对象属性值

说明:解析JSON需要用到 org.json.jar 架包,下载地址:http://download.csdn.net/detail/wtingting5211314/7641749 代码如下: package com.ultrapower.syn.webservice.test; import org.json.JSONArray;import org.json.JSONObject; public class TestJson { /**  * @param args  */ public