java - 使用 Gson 将 Json 对象解析为 Json 数组

标签 java android gson

我正在调用一个 web 服务,它给我一个像这样的 json

{
    "discussions": [{
        "id": 54,
        "name": "Test Discusssion",
        "discussion": 41,
        "created": 1472816138,
        "modified": 1472816138,
        "subject": "Test Discusssion",
        "message": "<p>Welcome all to test discussion<\/p>",
    }],
    "warnings": []
}

但在android中我将其解析为

ArrayList<MoodleDiscussion> mDiscussions = gson.fromJson(reader,
      new TypeToken<List<MoodleDiscussion>>() {
      }.getType());

我得到的错误是

java.lang.IllegalStateException:应为 BEGIN_ARRAY 但为 BEGIN_OBJECT

我想把接收到的json转成数组,应该怎么办?

这是 MoodleDiscussion 类

public class MoodleDiscussion extends SugarRecord < MoodleDiscussion > {@
    SerializedName("id") int discussionid;@
    SerializedName("name") String name;@
    SerializedName("subject") String subject;
    public int getDiscussionid() {
        return discussionid;
    }
    public String getName() {
        return name;
    }
    public int getUserid() {
        return userid;
    }
    public String getSubject() {
        return subject;
    }
}

最佳答案

您尝试解析的列表包含在一个嵌套的 json 数据结构中,如果 Gson 要正确解析它,该数据结构也需要在 java 类中表示。

你需要一个看起来像这样的容器类:

public class MoodleDiscussionResponse {
    private List<MoodleDiscussion> discussions;
    private List<Object> warnings;

    public List<MoodleDiscussion> getDiscussions() {
        return discussions;
    }

    public List<Object> getWarnings() {
        return warnings;
    }
}

那么你应该能够像这样阅读它:

MoodleDiscussionResponse response = gson.fromJson(reader, MoodleDiscussionResponse.class);
List<MoodleDiscussion> mDiscussions = response.getDiscussions(); 

关于java - 使用 Gson 将 Json 对象解析为 Json 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39361159/

相关文章:

java - 如何在我的 build.xml 中将所有依赖项部署到 tomcat

java - Android MediaPlayer无法正确播放音频

java - 如何在选项卡布局中的 RelativeLayout 上显示 Fab

android - 无法在Android中查询数据库

java - java.lang.Object 怎么可能用 Java 实现?

java - 在闭包模板中使用主布局模板

Android Studio 显示未解析的引用 : Gson even though I have it in gradle and it works

java - GSON 默认日期序列化器是特定于语言环境的

java - 从 JSON 获取数据

java - 如何在菜单栏中导入图像