java - JSON嵌套解析
问题描述
谁能帮我设置这个 JSON 数据文件的解析。
我想得到每列火车的出发。结构是出发-> 全部-> 0,1,2,3 等...谢谢
我正在尝试获取某些字符串,例如时间、目的地和平台,然后将其显示在每次出发的列表中。
private void jsonParse()
{
String url = key;
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d("REST", response.toString());
try {
JSONArray jsonArray= response.getJSONArray("departures");
Log.d("REST", jsonArray.toString());
for(int i = 0; i < jsonArray.length(); i++)
{
JSONObject departure = jsonArray.getJSONObject(i);
JSONObject all = departure.getJSONObject("all");
String Mode = all.getString("Mode");
TextViewResult.append(Mode + "\n");
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
Queue.add(request);
}
解决方案
如果我理解正确,你不会得到任何结果,对吧?
JSON 对象 (0, 1, ...) 是“all”的子对象,它是 a JSONArray
,而不是 a JSONObject
。而“出发”似乎是 aJSONObject
而不是 a JSONArray
。你应该:
将“离开”作为一个
JSONObject
循环。JSONArray
从前一个中获取“全部” ,因为它是“出发”的孩子,并且在循环之外也这样做。迭代循环中的前一个
JSONArray
,获得JSONObject
每个代表一个出发点的 's。
所以,里面的块try
看起来像这样:
//logging omitted
JSONObject departuresJSONObj = response.getJSONObject("departures");
JSONArray allJSONArr = departuresJSONObj.getJSONArray("all");
JSONObject departureJSONObj;
String mode;
for (Object departureObj : allJSONArr) {
if (departureObj instanceof JSONObject) {
departureJSONObj = (JSONObject) departureObj;
mode = departureJSONObj.getString("mode"); //mode is lowercase in the JSON
TextViewResult.append(mode + "\n");
}
}
希望这可以帮助。
推荐阅读
- angular - 使用 valueChanges 监听嵌套 FormGroup 下的任何字段更改
- model - 如何在 Papyrus (SysML) 中为特定领域的建模创建“模型库”?
- excel - 复杂的在重复中查找行显示 A 或 B 或 C 列
- r - 使用 dplyr 按两个因素分组
- reactjs - ApolloClient/React/TypeScript,拖放缓存更新导致意外重新渲染
- flutter - 在颤振项目中自动创建重复文件
- javascript - 如何在 ReactJS 中使用 TypeScript 和 forwardRef?
- sql - 检查用户是否在某些操作后未登录
- wpf - 绑定到 WPF GridViewHeader 中的元素不起作用
- c# - 在 C# 中同时过滤和计数