如何解析不可预测的 JSON 对象?
Posted
技术标签:
【中文标题】如何解析不可预测的 JSON 对象?【英文标题】:How to parse unpredictable JSON objects? 【发布时间】:2017-12-09 18:45:57 【问题描述】:我的应用根据用户的选择从 API 解析 JSON。由于每个用户的搜索可能不同,我无法预测用户将搜索什么,并且每次完成 API 调用时都有一个已建立的解析结构在等待他们。
问题是如何在我的应用程序中拥有一个 JSON 解析结构来处理来自不同 API 调用的这个未定义/不可预测的 JSON 对象?
基本上,我需要一种方法来处理不可预测和未知的 JSON 对象,就像它们是已知的一样,我可以解析它们的键和其中的数据。
谢谢。
【问题讨论】:
嗯,使用 JSON 解析器。最常见的 android JSON 解析器支持解析为通用结构(例如,Map<String, Object>
)或提供定制的 API 用于导航结构(例如,JSONObject
)。
你介意给我一个实际的例子吗?
嗯,有JSONObject
,还有JsonReader
,这两个都是Android SDK 的一部分。它们都适用于任意 JSON 内容。
【参考方案1】:
您可以使用 ObjectMapper 将您的 JSON 转换为一些键值结构对象,例如 Map 或 HashMap:
Map<String,Object> result = new ObjectMapper().readValue(jsonData, Map.class);
jsonData
可以是文件、流、字节、字符串……
更多详情:https://fasterxml.github.io/jackson-databind/javadoc/2.2.0/com/fasterxml/jackson/databind/ObjectMapper.html#readValue(byte[],%20java.lang.Class)
【讨论】:
【参考方案2】:如果我有您的代码,我会提供更多帮助,但希望我的解释对您有用。我最近制作了一个应用程序,它可以选择用户在服务器端输入的内容并显示在手机上。例如,你选择米饭和鱼,而另一个人选择米饭、鱼、咖啡和烤豆。这些是不同的东西,但我做了一个数组来保存这些东西,数组的长度取决于你选择的东西的数量。然后我构建一个 json 对象来解析。注意:您可以计算用户在变量中放置和安全的项目数,然后将该变量用作长度。
JSONObject jsonObject = new JSONObject(response);
if (jsonObject.getString(KEY_SUCCESS).equals("true"))
JSONArray dataArray = jsonObject.getJSONArray("data");
for (int i = 0; i < dataArray.length(); i++)
JSONObject dataobj = dataArray.getJSONObject(i);
我已经用“数据”保存了所有用户输入。一件事我的回答可能不符合您的描述,因为我不确定您是否从用户那里获得列表输入或类似长段落/文章的内容。我假设你得到了一个列表,所以我给了你一个使用数组的选项
【讨论】:
我的 JSON 响应是一个嵌套的 JSON 对象(另一个 json 对象中的多个 json 对象),因此我无法解析,因为它是 jsonArra。你有什么其他的想法可以帮忙吗?以上是关于如何解析不可预测的 JSON 对象?的主要内容,如果未能解决你的问题,请参考以下文章
如何优化间接基数排序? (又名如何优化不可预测的内存访问模式)