【问题标题】:Gson and only concentrate on inner objectGson,只专注于内在对象
【发布时间】:2012-10-10 17:43:19
【问题描述】:

好的,我有一个如下所示的 json:

{count:xxx, important:[{...}]}

我只关心重要的对象。有什么我可以用自定义反序列化器做的,或者我可以让 GSON 反序列化那个重要的 json 对象吗?

我希望反序列化的对象看起来是这样的:

List<Important> = Gson.fromJson(arg0, new TypeToken<ArrayList<Important>>(){}.getType() );

【问题讨论】:

  • 最近完成了 Gson 的一些工作,我只是硬着头皮将所有对象创建到我需要的对象。您可以省略字段名称,这些对象将被忽略。

标签: java gson


【解决方案1】:

是的,您可以使用 Gson 库中的 JsonParser 类将其读取为 JsonObject。然后,拉出你需要的内部对象,并使用 Gson 来填充你的 java 类。

例子:

Reader jsonReader =
                new BufferedReader(
                new InputStreamReader(getIStream("myFile.json")));
JsonParser parser = new JsonParser();
JsonObject top = parser.parse(jsonReader).getAsJsonObject();

JsonElement importantEl = top.get("important");

//Parse the important element into whatever structure you're creating
Gson gson = new Gson();
List<Important> important 
    = Gson.fromJson(importantEl, new TypeToken<ArrayList<Important>>(){}.getType() );

【讨论】:

  • 不应该 importantel 吗?我想知道这是如何工作的——它会创建一个 json 树吗?
  • 是的,对不起。我正在提取一些我为我正在从事的项目编写的代码。是的,JsonObject 是顶级 json 树的解析版本,JsonElement 类型可以表示 json 数组或 json 对象。 Gson 知道如何读取它并将其转换为您传入的类类型
  • 你说得有道理,但它会破坏我的泛型类,所以我会以其他方式解决它......
  • 嗯?你仍然可以用 Gson 解析到你的 POJO 中。我编辑了我的代码来接受你的线路。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
  • 1970-01-01
  • 1970-01-01
  • 2010-11-20
  • 2013-12-16
相关资源
最近更新 更多