我有一个 Web 服务类,它成功地将我的 JSON 从提要提取到 String
中。我想使用 Gson 将其解析为自定义类的 List
,但解析过程出现了问题。
现在进行解析的代码如下所示: http://pastie.org/2079115 . 包含 JSON。
我认为问题的发生是因为
的额外层"article": { ... }, "article": { ... } ...
几乎所有我能在网上找到的东西都告诉我要像上面那样做,包括 Gson API。
问题是 articles 变量最终成为一个包含正确文章数的列表,但每篇文章中的所有数据都是空的。我玩过
的结构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;
}
关于java - 使用 Json 解析 Gson 不适用于 Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6377864/