我有一个网络服务类,可以将我的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] 删除。
我来说两句