3 回答
TA贡献1797条经验 获得超6个赞
您遇到的问题是您正在尝试使用 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);
然后您可以单独访问您想要的任何属性。
TA贡献1818条经验 获得超3个赞
假设您的 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";
TA贡献1851条经验 获得超4个赞
不能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");
添加回答
举报