用Json解析Gson不适用于Android

时间:2011-06-16 20:01:11

标签: java android json parsing gson

我有一个Web服务类,可以成功地将我的JSON从Feed中提取到String。我想使用Gson将其解析为自定义类的List,但解析会以某种方式混乱。

现在执行解析的代码如下所示: http://pastie.org/2079115。 包含JSON。

我认为问题的出现是因为

的额外层
"article": { ... }, "article": { ... } ...

我在网上找到的所有内容都告诉我像上面那样做,包括Gson API。

问题在于,articles变量最终为具有正确数量的文章的列表,但每篇文章中的所有数据都为空。我玩弄了

的结构
Type collectionType = new TypeToken<ArrayList<Article>>(){}.getType;

但是任何更改最终都会在articles变量中为null,甚至不包含null文章。不知道从哪里开始?

作为参考,我的Article.java看起来像这样: http://pastie.org/2079165

1 个答案:

答案 0 :(得分:3)

问题是JSON结构与尝试反序列化的Java结构不匹配,并且没有提供用于处理不匹配的自定义反序列化处理。所以,是的,“问题是因为额外的层而发生的。”

一个简单的解决方案是更改Java结构以匹配JSON结构。 JSON结构是

an array of 
    an unnamed object with 
        one element named article with value of
            an object with 
                seven elements named author_id, body, catagory, created_at, id, published, updated_at

这是一个例子,使用与原始问题相同的JSON。

import java.io.FileReader;
import java.lang.reflect.Type;
import java.util.ArrayList;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class Foo
{
  public static void main(String[] args) throws Exception
  {
    Gson gson = new Gson();
    Type collectionType = new TypeToken<ArrayList<ArticleContainer>>() {}.getType();
    ArrayList<ArticleContainer> articles = gson.fromJson(new FileReader("input.json"), collectionType);
    System.out.println(gson.toJson(articles));
  }
}

class ArticleContainer
{
  Article article;
}

class Article
{
  public int author_id;
  public String body;
  public String catagory;
  public String created_at;
  public int id;
  public String published;
  public String updated_at;
}