使用Gson将Json对象解析为Json数组 [英] Parsing Json Object to Json Array using Gson

查看:429
本文介绍了使用Gson将Json对象解析为Json数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  {
discussion:[{
id:54,
name:Test Discusssion,
讨论:41,
创建:1472816138,
modified :1472816138,
subject:Test Discusssion,
message:< p>欢迎所有人参加测试讨论< \ / p>,
}],
warnings:[]
}

但是我在解析它as

  ArrayList< MoodleDiscussion> mDiscussions = gson.fromJson(阅读器,
新TypeToken< List< MoodleDiscussion>>(){
} .getType());

我得到的错误是

java.lang.IllegalStateException:预期的BEGIN_ARRAY,但是BEGIN_OBJECT



我想将接收到的json转换为数组, p>

以下是MoodleDiscussion类

  public class MoodleDiscussion extends SugarRecord< Moodle讨论> {@ 
SerializedName(id)int discussionid; @
SerializedName(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>讨论;
私人列表< Object>警告;

公开列表< MoodleDiscussion> getDiscussions(){
返回讨论;
}

public List< Object> getWarnings(){
返回警告;
}
}

然后您应该可以像这样读取它:

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


I am calling a webservice which gives me a json like this

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

But in android I am parsing it as

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

And the error I am getting is

java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT

I want to convert the received json into an array how should I ?

Here is the MoodleDiscussion class

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;
    }
}

解决方案

The list you're trying to parse is contained within a nested json data structure that also needs to be represented in java classes if Gson is to parse it correctly.

You'll need a container class that looks something like this:

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

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

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

Then you should be able to read it like so:

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

这篇关于使用Gson将Json对象解析为Json数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆