3 回答

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
您遇到的問題是您正在嘗試使用 JSONObjects,即使位置是一個(gè)數(shù)組,對(duì)象也是如此。
為此,您需要像這樣迭代數(shù)組:
JSONObject jo = new JSONObject(yourData);
JSONArray locations = jo.getJSONArray("locations");
for (int i = 0; i < locations.length(); ++i) {
//iterate over each key, etc.
}
在我看來,在一天結(jié)束時(shí),如果您更改密鑰、添加密鑰等,這將是一團(tuán)糟,并且維護(hù)起來很痛苦。我建議您查看 GSON 之類的東西,然后只創(chuàng)建數(shù)據(jù)的視圖模型你要。最后你會(huì)得到這樣的東西:
List<T> yourObjects = gson.fromJson(jsonReader, X[].class);
然后您可以單獨(dú)訪問您想要的任何屬性。

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊
假設(shè)您的 json 數(shù)據(jù)原樣以及您在上面寫的輸出:
JSONArray locations = data.getJSONArray("location");
JSONObject loc = locations.getJSONObject(0);
JSONObject geo = loc.getJSONObject("geo");
JSONObject country = geo.getJSONObject("country");
JSONObject astronomy = loc.getJSONObject("astronomy");
JSONObject objects = astronomy.getJSONArray("objects").getJSONObject(0);
JSONObject day = objects.getJSONArray("days").getJSONObject(0);
StringBuilder result = new StringBuilder();
String singleParsed = "Name:" + geo.getString("name") + "\n" +
"Country: " + country.getString("name") +
"Moon Phase: " + astronomy.getString("moonphase") + "\n";

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個(gè)贊
不能moonphase直接從astronomy, []將定義一個(gè)數(shù)組,所以你可以這樣做:
"astronomy": {
"objects": [{
"name": "moon",
"days": [{
"date": "2018-09-05",
"events": [],
"moonphase": "waningcrescent"
}]
}]
}
JSONObject astronomy = JO.getJSONObject("astronomy");
JSONArray objects = astronomy.getJSONArray("objects");
JSONArray days = objects.getJSONObject(0).getJSONArray("days");
JSONObject moonphase = days.getJSONObject(0).get("moonphase");
添加回答
舉報(bào)