java遍历复杂json_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> list = new ArrayList>();

for (int i = 0; i < twos.size(); i++) {

two = twos.getJSONObject(i);

Map map = new HashMap();

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

完成!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值