当 Json root 不是数组而是对象时如何解析 JSON 数据,反之亦然,基于不同的 url?
Posted
技术标签:
【中文标题】当 Json root 不是数组而是对象时如何解析 JSON 数据,反之亦然,基于不同的 url?【英文标题】:How to parse JSON data when Json root is not an array but an object and vice-versa, based on different urls? 【发布时间】:2020-03-11 08:54:57 【问题描述】:我正在尝试构建一个使用 github api 的 android 应用程序。 我面临 JSON 解析的问题。 我有一个查找 JSONArray 并生成相应 JSON 数据以在 UI 中显示它们的函数,但问题是该函数仅在 JSON 根是数组时才有效。 对于前- 当 url 是“https://api.github.com/users”时,它工作得很好,因为根是一个数组,但是现在当我转到诸如“https://api.github.com/users/mojombo”之类的 url 时,JSON 根变成了一个对象。我现在如何解析它以便在 UI 中显示数据? 我必须为 JSONObjects 编写单独的函数吗??
**java函数是**
private void makeJSON(String res) throws JSONException
JSONArray root = new JSONArray(res);
for (int i =0; i<root.length();i++)
JSONObject jsonObject= root.getJSONObject(i);
String name = jsonObject.getString("login");
int id = jsonObject.getInt("id");
【问题讨论】:
【参考方案1】:答案是肯定的。在这里,您尝试在单个函数中解析不同类型的对象(用户列表和特定用户信息)。这违反了单一责任原则。 您可以将此功能一分为二(解析用户列表和用户数据),但最好使用 Retrofit 2。
【讨论】:
谢谢。我会去改造.. :)以上是关于当 Json root 不是数组而是对象时如何解析 JSON 数据,反之亦然,基于不同的 url?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 中解析 JSON 数组(不是 Json 对象)