android中数据的解析,Android 中解析复杂的JSON数据

本文详细介绍了在Android开发中,如何使用JSONObject和JSONArray解析来自和风天气API的复杂JSON数据,展示了从获取JSON数组到提取所需字段的完整过程,适合初学者理解基础JSON解析技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android 解析复杂JSON

学习自:自学。

Overview

今天在学实例的时候想要使用和风天气的开发API添加一个天气模块。

但是在我的到JSON 数据的时候我没有解析出来,但是我发现他是一个JSON数组,但是网上很多方法都是使用Gson去解析的,但是的开发环境不允许我使用Gson去开发,所以我通过JSONObject和JSONArray去进行解析。

先来看一下我们的和风天气返回的代码

{

"HeWeather6": [

{

"basic": {

"cid": "CN101190401",

"location": "苏州",

"parent_city": "苏州",

"admin_area": "江苏",

"cnty": "中国",

"lat": "31.29937935",

"lon": "120.61958313",

"tz": "+8.00"

},

"update": {

"loc": "2019-12-27 14:42",

"utc": "2019-12-27 06:42"

},

"status": "ok",

"now": {

"cloud": "10",

"cond_code": "100",

"cond_txt": "晴",

"fl": "5",

"hum": "49",

"pcpn": "0.0",

"pres": "1026",

"tmp": "8",

"vis": "6",

"wind_deg": "199",

"wind_dir": "西南风",

"wind_sc": "2",

"wind_spd": "8"

}

},

{

"basic": {

"cid": "CN101220701",

"location": "宿州",

"parent_city": "宿州",

"admin_area": "安徽",

"cnty": "中国",

"lat": "33.63389206",

"lon": "116.98408508",

"tz": "+8.00"

},

"update": {

"loc": "2019-12-27 14:42",

"utc": "2019-12-27 06:42"

},

"status": "ok",

"now": {

"cloud": "0",

"cond_code": "100",

"cond_txt": "晴",

"fl": "5",

"hum": "47",

"pcpn": "0.0",

"pres": "1021",

"tmp": "9",

"vis": "13",

"wind_deg": "210",

"wind_dir": "西南风",

"wind_sc": "3",

"wind_spd": "17"

}

},

{

"basic": {

"cid": "CN101160802",

"location": "肃州",

"parent_city": "酒泉",

"admin_area": "甘肃",

"cnty": "中国",

"lat": "39.74385834",

"lon": "98.51115417",

"tz": "+8.00"

},

"update": {

"loc": "2019-12-27 14:42",

"utc": "2019-12-27 06:42"

},

"status": "ok",

"now": {

"cloud": "0",

"cond_code": "100",

"cond_txt": "晴",

"fl": "-2",

"hum": "23",

"pcpn": "0.0",

"pres": "852",

"tmp": "1",

"vis": "16",

"wind_deg": "33",

"wind_dir": "东北风",

"wind_sc": "2",

"wind_spd": "6"

}

}

]

}

这个就是我们和风天气返回的JSON 文件了。

是不是看着就复杂,反正我是这么觉得。

那么我们看一下如何去解析他:

解析JSON

先来看一下源代码:

new Thread(new Runnable() {

@Override

public void run() {

String weatherJson = GetWeather();

try {

JSONObject jsonObject = new JSONObject(weatherJson);

JSONArray jsonArray = jsonObject.getJSONArray("HeWeather6");

JSONObject JsonNow = jsonArray.getJSONObject(0).getJSONObject("now");

final String fl = JsonNow.getString("fl");

final String tmp = JsonNow.getString("tmp");

final String weather_txtData = JsonNow.getString("cond_txt");

final String wind_dir = JsonNow.getString("wind_dir");

final String wind_spd = JsonNow.getString("wind_sc");

JSONObject JsonBasic = jsonArray.getJSONObject(0).getJSONObject("basic");

final String location = JsonBasic.getString("location");

runOnUiThread(new Runnable() {

@Override

public void run() {

txtfl.setText("体感温度:" + fl);

txtlocation.setText("查询地区:" + location);

txttmp.setText("天气温度:" + tmp);

txtWeatherText.setText("天气情况:" + weather_txtData);

txtwinddir.setText("风向:" + wind_dir);

txtwindspd.setText("风力:" + wind_spd);

}

});

} catch (Exception ex) {

ex.printStackTrace();

}

}

}).start();

这里我只给出了解析JSON的代码,关于如何获取JSON数据我不管。

我们仔细地看看JSON 元数据。

他在HeWeather6中包含了一个数组,然后先获取到对应地数组。

然后通过指定的名字取获取你需要的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值