用Json解析Gson不适用于Android

克里斯:

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

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

我认为问题是由于额外的一层

"article": { ... }, "article": { ... } ...

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

问题在于,articles变量最终以具有正确数目的Articles的列表形式出现,但是每个Article中的所有数据均为空。我玩弄了

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

但是任何更改最终都会导致Articles变量为null,甚至不包含null Articles。知道从这里去哪里吗?

作为参考,我的Article.java如下所示:http : //pastie.org/2079165

程序员布鲁斯:

问题是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;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章