JSON解析帮助(原生Android、java)
Posted
技术标签:
【中文标题】JSON解析帮助(原生Android、java)【英文标题】:JSON parsing help (Native Android, java) 【发布时间】:2021-11-01 02:35:46 【问题描述】:我正在尝试进行 JSON 解析。 JSON数据如下所示,我正在尝试获取“类别”。我能够 JSON 解析其他所有内容,但我不确定这个“类别”属于什么,它是 JSONObject、JSONArray 还是其他什么?我是一个自学成才的新手,通常我熟悉JSONArray的形式为“JSONArray”:[“content”],“content”是JSONObject。但在这种情况下,“类别”:[“内容”]。我正在尝试解析这个“类别”,并将其转换为字符串。感谢您的帮助。
"results": [
"type": "Restaurant",
"id": "jfhuiewjkfkdljiahueijkfnlsdiejkl1484391hjk8421k",
"score": 99.9844207764,
"dist": 15.581982823437135,
"info": "search:ta:840369014527642-US",
"poi":
"name": "RoofTop Bar",
"categorySet": [
"id": 184729472943
],
"categories": [
"pub food",
"restaurant"
]
]
这是我尝试过的:
groups = new JSONArray();
groups = response.getJSONArray("results");
if (groups.length() > 0)
JSONObject resultObject = groups.getJSONObject(0);
if (resultObject.has("poi"))
if (resultObject.getJSONObject("poi").has("name"))
nameResult = resultObject.getJSONObject("poi").getString("name");
else
nameResult = "Information is not available.";
if (resultObject.getJSONObject("poi").has("categories"))
JSONObject categoriesResult;
categoriesResult = resultObject.getJSONObject("categories").toString();
【问题讨论】:
此 json 无效.. "poi" 对象未关闭。 我刚刚编辑了,现在应该已经完成了。 尝试类似jsonlint.com 以确保您的 JSON 有效。它仍然失败。 Notepad++ 还有一个不错的插件“JSON Viewer”,它有一个“Format JSON”可以验证它。 嗨,JSON 应该是有效的,我能够获取其他信息的信息,例如名称。但我只是不熟悉“类别”的格式。 @Brian McCanaugh - 使用复杂的 if/else 块......当您未能正确 INDENT 时,您可能会无意中导致很多 LOGIC 错误。只是说... 【参考方案1】:results
是一个对象数组
第一个对象包含一个名为poi
的属性
poi
包含一个名为 categories
的属性
所以使用从上到下的方法,我们可以到达
const categoriesArray = results[0].poi.categories; // gives categories as an array of strings
const categoriesString = categoriesArray.join(",") // gives categories as string, with comma separated values
【讨论】:
您好,我会通过您的推荐获得类别 =“酒吧食品、餐厅”吗?我已经编辑了我的问题,包括我在 android Studio 中尝试过的内容。 嗨@BrianMcCanaugh。请找到我编辑的答案。在那里,categoriesString
就是你要找的东西【参考方案2】:
我不确定它是否是实际的原始数据,但包含类别的 poi 对象格式不正确。它缺少一个可能导致解析问题的右括号。
除此之外,来自 poi 对象的字段类别是一个字符串列表
为了获得它们,您可以使用results[0].poi.categories
从您的对象中访问它们,或者在使用result.poi.categories
访问类别之前遍历结果,其中result
是包含当前循环结果的变量。
编辑:
从您的代码示例中,假设响应是 JSONObject,您可以执行以下操作。
然后要获取不使用数组格式的字符串中的类别,您可以遍历类别并将它们连接到一个字符串。
String categories = resultObject.get("categories").join(", ");
【讨论】:
您好,我会通过您的推荐获得类别 =“酒吧食品、餐厅”吗?我已经编辑了我的问题,包括我在 Android Studio 中尝试过的内容。 目前你会得到一个表示数组的字符串,它看起来像 "[\"pub food\", \"restaurant\"]" 如果你想要你提到的你必须循环遍历数组并使用类别上的 toString 将它们连接到一个字符串。 嗨,我确实尝试过使用 toString 方法。但是我收到一条错误消息,说明“找不到类别”。我无法使用 getJSONObject 和 getJSONArray 获取“类别”的内容。 我已根据您的需要更新了我的 anwser。您能否与 resultObject.getJSONArray("categories") 分享您遇到的完整异常消息? 我想通了。我刚刚使用了 .get("categories")。感谢您的帮助。以上是关于JSON解析帮助(原生Android、java)的主要内容,如果未能解决你的问题,请参考以下文章