1. 程式人生 > >Json解析陣列物件

Json解析陣列物件

看了Gson、FastJson解析,確實簡便了很多,但是如果key關鍵字有重複的怎麼辦呢,

而且我要解析的Json比較複雜,綜合後還是考慮用JsonObject、JsonArray比較好

下面我按部分來說明

1 這是最簡單的一種

			"pm25":{
				"key":"Hefei",
				"show_desc":0,
				"pm25":{
					"curPm":"112",
					"pm25":"84",
					"pm10":"114",
					"level":3,
					"quality":"輕度汙染",
					"des":"輕微汙染 易感人群症狀有輕度加劇,健康人群出現刺激症狀 心臟病和呼吸系統疾病患者應減少體力消耗和戶外活動。"
				},
				"dateTime":"2016年10月06日11時",
				"cityName":"合肥"
			},
如下:
		///解析當前空氣
				JSONObject  data = new JSONObject(resultString);//resultString是需要解析的字串
				JSONObject pM25JsonObject = data.getJSONObject("pm25");
				JSONObject curPm25JsonObject =pM25JsonObject.getJSONObject("pm25");
				Log.i("當前PM25:",curPm25JsonObject.getString("curPm"));
				Log.i("當前空氣等級:",curPm25JsonObject.getString("level"));
				Log.i("當前空氣質量:",curPm25JsonObject.getString("quality"));
				Log.i("當前空氣描述:",curPm25JsonObject.getString("des"));


2  物件裡是陣列

				"info":{
					"chuanyi":[
						"舒適",
						"建議著長袖T恤、襯衫加單褲等服裝。年老體弱者宜著針織長袖襯衫、馬甲和長褲。"
					],
					"ganmao":[
						"較易發",
						"雖然溫度適宜但風力較大,仍較易發生感冒,體質較弱的朋友請注意適當防護。"
					],
					"kongtiao":[
						"較少開啟",
						"您將感到很舒適,一般不需要開啟空調。"
					],
					"xiche":[
						"不宜",
						"不宜洗車,未來24小時內有雨,如果在此期間洗車,雨水和路上的泥水可能會再次弄髒您的愛車。"
					],
					"yundong":[
						"較適宜",
						"陰天,較適宜進行各種戶內外運動。"
					],
					"ziwaixian":[
						"最弱",
						"屬弱紫外線輻射天氣,無需特別防護。若長期在戶外,建議塗擦SPF在8-12之間的防晒護膚品。"
					]
				}
如下:			JSONObject info = new JSONObject(string);
				Iterator it = info.keys();///chuanyi   ganmao 
				while(it.hasNext()){
					String key = (String)it.next();
					JSONArray  indexArray = info.getJSONArray(key);
					if(key.equals("chuanyi")){
						Log.i("穿衣是:", "指數:"+indexArray.getString(0)+"   描述:"+indexArray.getString(1));
					}
					if(key.equals("ganmao")){
						Log.i("感冒是:", "指數:"+indexArray.getString(0)+"   描述:"+indexArray.getString(1));
					}
					if(key.equals("kongtiao")){
						Log.i("空調是:", "指數:"+indexArray.getString(0)+"   描述:"+indexArray.getString(1));
					}
					if(key.equals("xiche")){
						Log.i("洗車是:", "指數:"+indexArray.getString(0)+"   描述:"+indexArray.getString(1));
					}
					if(key.equals("yundong")){
						Log.i("運動是:", "指數:"+indexArray.getString(0)+"   描述:"+indexArray.getString(1));
					}
					if(key.equals("ziwaixian")){
						Log.i("紫外線是:", "指數:"+indexArray.getString(0)+"   描述:"+indexArray.getString(1));
					}
					
				}

3 物件陣列物件

"f3h":{
				"temperature":[
					{
						"jg":"20161006110000",
						"jb":"23"
					},
					{
						"jg":"20161006140000",
						"jb":"25"
					},
					{
						"jg":"20161006170000",
						"jb":"25"
					},
					{
						"jg":"20161006200000",
						"jb":"22"
					},
					{
						"jg":"20161006230000",
						"jb":"21"
					},
					{
						"jg":"20161007020000",
						"jb":"20"
					},
					{
						"jg":"20161007050000",
						"jb":"20"
					},
					{
						"jg":"20161007080000",
						"jb":"20"
					},
					{
						"jg":"20161007110000",
						"jb":"22"
					}
				]
}
如下:
                                JSONObject f3h = new JSONObject(string);
				JSONArray f3hTemperatureArray = f3h.getJSONArray("temperature");
				Log.i("24h的預測溫度:", "時間:"+f3hTemperatureArray.getJSONObject(0).getString("jg")+"   溫度:"+f3hTemperatureArray.getJSONObject(0).getString("jb"));
				Log.i("24h的預測溫度:", "時間:"+f3hTemperatureArray.getJSONObject(1).getString("jg")+"   溫度:"+f3hTemperatureArray.getJSONObject(1).getString("jb"));
				Log.i("24h的預測溫度:", "時間:"+f3hTemperatureArray.getJSONObject(2).getString("jg")+"   溫度:"+f3hTemperatureArray.getJSONObject(2).getString("jb"));
				Log.i("24h的預測溫度:", "時間:"+f3hTemperatureArray.getJSONObject(3).getString("jg")+"   溫度:"+f3hTemperatureArray.getJSONObject(3).getString("jb"));
				Log.i("24h的預測溫度:", "時間:"+f3hTemperatureArray.getJSONObject(4).getString("jg")+"   溫度:"+f3hTemperatureArray.getJSONObject(4).getString("jb"));
				Log.i("24h的預測溫度:", "時間:"+f3hTemperatureArray.getJSONObject(5).getString("jg")+"   溫度:"+f3hTemperatureArray.getJSONObject(5).getString("jb"));
				Log.i("24h的預測溫度:", "時間:"+f3hTemperatureArray.getJSONObject(6).getString("jg")+"   溫度:"+f3hTemperatureArray.getJSONObject(6).getString("jb"));
				Log.i("24h的預測溫度:", "時間:"+f3hTemperatureArray.getJSONObject(7).getString("jg")+"   溫度:"+f3hTemperatureArray.getJSONObject(7).getString("jb"));
				Log.i("24h的預測溫度:", "時間:"+f3hTemperatureArray.getJSONObject(8).getString("jg")+"   溫度:"+f3hTemperatureArray.getJSONObject(8).getString("jb"));
				

4 陣列物件物件陣列

  "weather":[
				{
					"date":"2016-10-07",
					"info":{
						"dawn":[
							"7",
							"小雨",
							"19",
							"東北風",
							"4-5 級",
							"17:49"
						],
						"day":[
							"7",
							"小雨",
							"22",
							"東北風",
							"3-4 級",
							"06:08"
						],
						"night":[
							"1",
							"多雲",
							"17",
							"西南風",
							"微風",
							"17:48"
						]
					},
					"week":"五",
					"nongli":"九月初七"
				},
				{
					"date":"2016-10-08",
					"info":{
						"dawn":[
							"1",
							"多雲",
							"17",
							"西南風",
							"微風",
							"17:48"
						],
						"day":[
							"1",
							"多雲",
							"24",
							"東北風",
							"微風",
							"06:09"
						],
						"night":[
							"1",
							"多雲",
							"16",
							"東北風",
							"3-4 級",
							"17:47"
						]
					},
					"week":"六",
					"nongli":"九月初八"
				}
        ]

如下:
JSONArray weather_array = new JSONArray(string);
				// ////////////////////////////////////////////////////////////////////////當天
				Log.i("今天的陽曆是:", weather_array.getJSONObject(0).getString("date"));
				Log.i("今天的星期是:", weather_array.getJSONObject(0).getString("week"));
				Log.i("今天的農曆是:", weather_array.getJSONObject(0).getString("nongli"));
				
				JSONObject today_info = weather_array.getJSONObject(0).getJSONObject("info");
				Iterator today_it = today_info.keys();
				while (today_it.hasNext()) {
					String today_key = (String) today_it.next();
					JSONArray today_weather_info_array = today_info.getJSONArray(today_key);
	/*	             "day": [
	                            "7", 
	                            "小雨", 
	                            "25", 
	                            "東北風", 
	                            "4-5 級", 
	                            "06:08"
	                        ], */
					if (today_key.equals("dawn")) {
						Log.i("今天凌晨的溫度是:", today_weather_info_array.getString(2));
					}
					if (today_key.equals("day")) {
						
						Log.i("今天白天的天氣標識是:", today_weather_info_array.getString(0));
						Log.i("今天白天的天氣是:", today_weather_info_array.getString(1));
						Log.i("今天白天的溫度是:", today_weather_info_array.getString(2));
						Log.i("今天白天的風向是:", today_weather_info_array.getString(3));
						Log.i("今天白天的風力是:", today_weather_info_array.getString(4));
						Log.i("今天白天的日出時間是:", today_weather_info_array.getString(5));

					}
				if (today_key.equals("night")) {
						
						Log.i("今天夜間的天氣標識是:", today_weather_info_array.getString(0));
						Log.i("今天夜間的天氣是:", today_weather_info_array.getString(1));
						Log.i("今天夜間的溫度是:", today_weather_info_array.getString(2));
						Log.i("今天夜間的風向是:", today_weather_info_array.getString(3));
						Log.i("今天夜間的風力是:", today_weather_info_array.getString(4));
						Log.i("今天夜間的日落時間是:", today_weather_info_array.getString(5));

					}
				}///while,遍歷三個時間段的迴圈
				
				// ////////////////////////////////////////////////////////////////////////第2天
				Log.i("第2天的陽曆是:", weather_array.getJSONObject(1).getString("date"));
				Log.i("第2天的星期是:", weather_array.getJSONObject(1).getString("week"));
				Log.i("第2天的農曆是:", weather_array.getJSONObject(1).getString("nongli"));
				
				JSONObject day2_info = weather_array.getJSONObject(1).getJSONObject("info");
				Iterator day2_it = day2_info.keys();
				while (day2_it.hasNext()) {
					String day2_key = (String) day2_it.next();
					JSONArray day2_weather_info_array = day2_info.getJSONArray(day2_key);
	/*	             "day": [
	                            "7", 
	                            "小雨", 
	                            "25", 
	                            "東北風", 
	                            "4-5 級", 
	                            "06:08"
	                        ], */
					if (day2_key.equals("dawn")) {
						Log.i("第2天凌晨的溫度是:", day2_weather_info_array.getString(2));
					}
					if (day2_key.equals("day")) {
						
						Log.i("第2天白天的天氣標識是:", day2_weather_info_array.getString(0));
						Log.i("第2天白天的天氣是:", day2_weather_info_array.getString(1));
						Log.i("第2天白天的溫度是:", day2_weather_info_array.getString(2));
						Log.i("第2天白天的風向是:", day2_weather_info_array.getString(3));
						Log.i("第2天白天的風力是:", day2_weather_info_array.getString(4));
						//Log.i("第2天白天的日出是:", day2_weather_info_array.getString(5));

					}
				if (day2_key.equals("night")) {
						
						Log.i("第2天夜間的天氣標識是:", day2_weather_info_array.getString(0));
						Log.i("第2天夜間的天氣是:", day2_weather_info_array.getString(1));
						Log.i("第2天夜間的溫度是:", day2_weather_info_array.getString(2));
						Log.i("第2天夜間的風向是:", day2_weather_info_array.getString(3));
						Log.i("第2天夜間的風力是:", day2_weather_info_array.getString(4));
						//Log.i("第2天夜間的日落是:", day2_weather_info_array.getString(5));

					}
				}///while,遍歷三個時間段的迴圈
				

親測可用

總結如下:

{  }是物件,需要是JsonObject.getString(str)

[  ]是陣列,需要是JsonArray.getString(i)

{[ ] ,[ ]}物件裡是陣列,需要用JsonObject  Iterator  while迴圈

[{ },{ }]數組裡是物件,需要用JsonArray.getJsonObject(i)




相關推薦

Json解析陣列物件

看了Gson、FastJson解析,確實簡便了很多,但是如果key關鍵字有重複的怎麼辦呢, 而且我要解析的Json比較複雜,綜合後還是考慮用JsonObject、JsonArray比較好 下面我按部分來說明 1 這是最簡單的一種 "pm25":{ "key"

json解析陣列物件

com.alibaba.fastjson.JSONObject jso = null; try { jso = JSON.parseObject(result);//json字串轉換成jsonobject物件 JSONArray objects

JSON陣列物件到後臺的過程和接收(TP框架)

TP框架中,前臺傳送陣列型別的json字串到後臺,後臺I方法獲取到的json字串會改變(可以在chrome下抓包看response), 用$_POST獲取之後再用json_decode轉化為陣列就能成功; 在I方法獲取過程中使用strip_tags替代掉htmlspecialchar

Newtonsoft.Json解析陣列 Newtonsoft.Json解析陣列

Newtonsoft.Json解析陣列   以下是遺傳json陣列: var jsonInfo=[{"name":"abc","id":"1","count":0},{"name":"def","id":"2","count":1}] 如果使用傳統的JsonCon

json解析陣列

1.在Android中包含四個與JSON相關的類和一個Exceptions:         a.JSONObject         這是系統中有關JSON定義的基本單元,其包含一對兒(Key/Value)數值。        b.JSONArray        它代表

解析json陣列,取其中一部分組成新陣列物件

var dataArr = [{id:"1111",name:"aaa",age:"22"},{id:"2222",name:"bbb",age:"33"}]; var jsonTarget=[]; var ids = ""; //第一種方法 for (var i = 0;

解析json陣列物件

專案中第一次遇到解析json時返回的是陣列物件,經查閱相關資料,解決方法如下: 第一種方法: import java.lang.reflect.Type; import java.util.Iterator; import java.util.LinkedLis

利用Gson解析request得到的Json字串陣列,並實現與具體物件間的轉換

當利用request.getParameter()方法得到Json字串陣列後,如果想要將其轉換成需要的Class物件時,可以利用Gson中自帶的一些物件來解析: ArticleBean article = new ArticleBean(); String

hive中UDF開發:解析json物件解析json陣列物件

hive預設函式: +-------------------------------------------------------------------+ json +--------------

自制JSON解析庫C++(一)--對JavaScript物件的理解

JSON只有兩種結構:鍵值對和陣列;它們之間可以相互巢狀,形成樹形結構,葉子節點有字串、數字、false、true、null。     在這之前,首先談談對JavaScript核心思想的理解:   在JS的世界裡,沒有類,只有物件,物件怎麼來,通

JSON陣列物件物件陣列

Json的簡單介紹 從結構上看,所有的資料最終都可以分成三種類型: 第一種型別是scalar(標量),也就是一個單獨的string(字串)或數字(numbers),比如“北京”這個單獨的詞。 第二種型別是sequence(序列),也就是若干個相關的資料按照一定順序並列在一起,又叫做arr

Javascript中的Array(陣列) 、{}(對映) 與JSON解析

下面是總結: 1.將javascript中的Array和{}轉化為json字串可以使用json2.js,原始碼地址https://github.com/douglascrockford/JSON-js。 2.將json字串轉為javascript物件,可以使用javascript自帶的eva

json與JS物件陣列 (筆記)

js只要用{}包起來的都是物件,都可以用物件取值A.B的形式取值。 json字串'{"a":"b","c":"D"}' 實際就是字串,使用取值方式(JSON.parse):  var jsonString = '{"bar":"property","baz":3}';

在Spring中實現後臺對JSON傳的陣列物件給List型別的引數繫結

就是在後臺接收前端傳的JSON串,其中包含陣列型別的資料。例如傳一個user使用者列表,後臺用List來接收。 其實有多種方法都可以實現,大概就是JSON方式,和非JSON的key/value那種方法。但是後臺前輩告訴我,要考慮前臺不是所有都會這兩種傳參的方式,

JSON轉化成物件或者陣列 使用jQuery簡單好用

直JSON轉化成物件或者陣列例項,直接上例子 JSON資料轉化成物件   for(var i=0; i<jsons.length; i++){         alert(json[i].bookid+"--------- " + json[i].b

Json陣列物件取值

1.資料格式    {"data":[{"username":"xxx","avatar":"xxx","gift_name":"xxx"},{"username":"xxx","avatar":"xxx","gift_name":"xxx"},{"username":"xxx","ava

js字串,陣列,物件,正則,canvas,json常用方法

字串 // split() 方法用於把一個字串分割成字串陣列。 let str="1,1,1,1" str.split(",") // [1,1,1,1] 陣列 concat() // 作用:陣列拼接 // 使用: this.server = this.server.con

Android 利用gson將json字串陣列轉陳物件的方法

前提:下載Gson.jar List<DaShangScanPostsBean> persons = new ArrayList(); Gson gson = new Gson();List<JsonElement> list = new Array

利用urllib讀取JSON,然後將JSON解析為Python物件 —— python學習筆記

1. 題目: 請利用urllib讀取JSON,然後將JSON解析為python物件: 題目的意思是使用urllib訪問一個介面,這個介面會放回json格式的資料,請將這一資料解析成python物件。 題目是廖雪峰老師的python教程中urllib的練習。 本篇博文只是針對這一題目,沒有

Java獲取json陣列物件的方法

JSONArray jsonArray1 = jsonObject.getJSONArray("result"); for (int i = 0; i < jsonArray1.leng