当 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?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用改造[重复]将对象解析为json

cjson数组如何解析

如何在 Android 中解析 JSON 数组(不是 Json 对象)

如何解析包含多个相同类型的 JSON 对象(不是数组)的 JSON 对象

如何在 jQuery 中解析 JSON 数组?

当 XML SOAP 响应中存在单个元素时,JSON 对象而不是数组