我有一个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
答案 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;
}