java - 使用 Json 解析 Gson 不适用于 Android

标签 java android json parsing gson

我有一个 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/

相关文章:

android - SurfaceView 到位图

java - Spring @RequestBody继承

java - jackson API的实现

java - 为什么在 Mockito 测试期间源代码另有说明时 protected 最终字段为空?

Android File.exists() 需要权限吗?

java - super 多值 map 的实现

java - 从本地网络读取文件,例如\\192.168.0.100\share\file.txt Android代码

javascript - 使用ajax和json验证登录表单

java - 您可以覆盖 log.properties 中特定日志的格式化程序吗

java - 从 PostGIS 数据库中的地理多边形读取点