java - 在 Java 中将 JSON 解析为字符串时遇到问题

标签 java android json

我有以下 JSON:

{
    data: [
    {
        objectType: "ServiceForbiddenException",
        item: {
            service: "users",
            action: "index",
            code: 403,
            message: "Access to the service [users] is forbidden."
        }
    }
    ]
}

我尝试使用以下代码 fragment 解析它:

       String bodyData = iRes.body().string();
       try{
            JSONObject body = new JSONObject(bodyData);
            JSONArray data = body.getJSONArray("data");
            JSONObject type =  data.getJSONObject(0);
            JSONArray item = data.getJSONArray(1);

        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

问题在于 JSONArray data = body.getJSONArray("data"); 实际上是整个数据,而不是数组。

如何正确解析它?有没有更好的库/方法来解析 Java (Android) 中的 json

最佳答案

对象是使用 {} 创建的,数组是使用 [] 创建的。所以

data:[
 { }
]

是标记为data的数组,它只包含一个对象(未标记,但索引为0),因此调用

data.getJSONArray(1);

这里没有意义,因为它会尝试找到

data:[
 { }
 [ ] <-this, but you don't have it in your JSON
]

您似乎想要获取 item object ,它是您已从数组中获取并存储在 type 中的对象的一部分。

所以而不是

JSONArray item = data.getJSONArray(1);

使用

JSONObject item = type.getJSONObject("item");
^^^^^^^^^^        ^^^^    ^^^^^^^^^^ - things you need to change

关于java - 在 Java 中将 JSON 解析为字符串时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31305089/

相关文章:

java - 如何使用 Spring 注入(inject)网络文件资源?

java - Android:带有查询参数的 Webview loadUrl

Java 数组和引用

php - 如何向远程数据库添加数据?

android - 如何接收华为运动健康App的数据?

android - 如何将 IntelliJ android 应用程序项目转换为 android 库项目?

javascript - 本地文本文件中的 jquery 自动完成功能未获取

java - 通过Groovy脚本从 Artifactory 获取用于多个作业的最新内部版本号。

android - 使用电话设备时,我在 ionic3 中看不到 JSON 数据(来自外部 Url 的 JSON 数据)

javascript - ASP.NET MVC 将 json 数组作为常规发布请求提交给 Controller (nonajax)