使用Gson使用动态字段构造带有JSON字符串的POJO

时间:2011-10-26 17:21:04

标签: java json gson

我在我的应用程序中使用了一个Web服务,该服务将返回与名称相关联的ID列表。一个例子如下:

{
  "6502": "News",
  "6503": "Sports",
  "6505": "Opinion",
  "6501": "Arts",
  "6506": "The Statement"
}

如果所有字段都是动态的,我如何为Gson构建一个POJO以反序列化?

2 个答案:

答案 0 :(得分:3)

如何反序列化到地图中?

Gson gson = new Gson();
Type mapType = new TypeToken<Map<String, String>>() {}.getType();
String json = "{'6502':'News','6503':'Sports','6505':'Opinion','6501':'Arts','6506':'The Statement'}";
Map<String, String> map = gson.fromJson(json, mapType);

使用地图对我来说听起来很合理(因为Java是静态类型的)。即使这可行(也许使用JavaCompiler) - 访问该对象可能与访问地图没有太大区别。

答案 1 :(得分:2)

我不太了解Gson,但我怀疑这是不可能的。您必须事先知道哪些字段是可能的,尽管字段可能不在Json中,因此为null。

您可以通过解析Json字符串在运行时创建类,但我不知道这是否值得麻烦。

如果一切都是动态的,你最好的选择是将Json字符串反序列化为字符串或数组的映射等,就像其他Json库一样(我不知道Gson是否也可以这样做,但你需要的类是通常称为JSONObjectJSONArray)。

因此,上面的Json字符串会产生Map<String, String>