我有以下JSON信息。
{
"version": 2,
"locations": [{
"id": "750",
"geo": {
"name": "Lord Howe Island",
"state": "Lord Howe Island",
"country": {
"id": "au",
"name": "Australia"
},
"latitude": -31.557,
"longitude": 159.086
},
"astronomy": {
"objects": [{
"name": "moon",
"days": [{
"date": "2018-09-05",
"events": [],
"moonphase": "waningcrescent"
}]
}]
}
}]
}
我想做的是打印到textView JSON中的一些细节(不是全部),所以我想要的输出如下:
名称:豪勋爵岛 国家:澳大利亚 月相:月牙减弱
但是,解析要在textView中打印的信息时我没有任何运气。我目前正在使用以下代码:
JSONArray JA = new JSONArray(data);
for (int i = 0; i < JA.length(); i++) {
JSONObject JO = (JSONObject) JA.get(i);
JSONObject geo = JO.getJSONObject("geo");
JSONObject astronomy = JO.getJSONObject("astronomy");
singleParsed = "Name:" + geo.get("name") + "\n" +
"Latitude:" + JO.get("latitude") + "\n" +
"Longitude:" + JO.get("longitude") + "\n" +
"Phase: " + astronomy.get("moonphase") + "\n";
}
然后显示以下数据:
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
MainActivity.fetcheddata.setText(this.singleParsed);
}
}
我可以只用打印所有数据
MainActivity.fetcheddata.setText(this.data);
但是,我也看到了textView和ALL Information中的标签,而不是我所关注的几个标签。
我在做什么错了?
非常感谢所有帮助
编辑:建议,目前正在研究中。
JSONArray JA = new JSONArray(data);
for (int i = 0; i < JA.length(); i++) {
JSONObject JO = (JSONObject) JA.get(i);
JSONObject astronomy = JO.getJSONObject("astronomy");
JSONArray objects = astronomy.getJSONArray("objects");
JSONArray days = objects.getJSONObject(0).getJSONArray("days");
Object moonphase = days.getJSONObject(0).get("moonphase");
moon = "Name:" + days.get(Integer.parseInt("moonphase"));
}
答案 0 :(得分:1)
您遇到的问题是,即使位置是数组,对象还是对象,您都试图使用JSONObjects。
要使其正常工作,您将需要像这样遍历数组:
JSONObject jo = new JSONObject(yourData);
JSONArray locations = jo.getJSONArray("locations");
for (int i = 0; i < locations.length(); ++i) {
//iterate over each key, etc.
}
在我看来,归根结底,如果您更改键,添加键等,这将是一团糟,并且很难维护。我建议您研究一下GSON之类的内容,然后仅创建视图模型您想要的数据。最后,您将得到如下结果:
List<T> yourObjects = gson.fromJson(jsonReader, X[].class);
然后,您可以单独访问所需的任何属性。
答案 1 :(得分:0)
无法直接从moonphase
获得astronomy
,[]
将定义一个数组,因此您可以这样做:
"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");
答案 2 :(得分:0)
假设您的json数据保持不变,而您的输出如您在上面编写的那样:
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";