Spring Jackson将json对象转换为java数组

时间:2017-08-28 16:32:28

标签: java json spring gson

我有一个像下面这样的json:

  

{ “键”:{ “一个”: “安勤”}}

“key”可以包含json对象以及json数组。我创建了以下java对象来映射这个json:

Class Output {
  private List<DummyObject> key;
  // setter, getting ommited
}
Class DummyObject {
  private String a;
}

所以,我想如果json是

  

{ “键”:[{ “一个”: “VAL1”},{ “一个”: “val2的”}]}

输出类的“key”属性应包含2个对象的列表,当json为

  

{ “键”:{ “一个”: “VAL1”}}

“key”应该只包含1个对象的列表。

我尝试过使用反序列化程序,但它不起作用。另外,我不想自己反序列化DummyObject

2 个答案:

答案 0 :(得分:0)

尝试启用杰克逊反序列化功能ACCEPT_SINGLE_VALUE_AS_ARRAY

final ObjectMapper mapper = new ObjectMapper()
        .enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);

答案 1 :(得分:0)

考虑 {"key":[{"a":"val1"},{"a":"val2"}]}

问题不在您的模型中,而是输出;

Class Output {
  private List<DummyObject> key;
  // setter, getting ommited
}

因为这表示key为json数组。

但您可能想要更新DummyObject:

Class DummyObject {
  private String a;
}

Class DummyObject {
  private Map<String,String> a;
}

由于{“a”:“val1”}不是DummyObject甚至String a的有效表示。

另外正如@tima指出的那样,对于“密钥”的JSONArray长度不同,你必须看看如何Make Jackson interpret single JSON object as array with one element

你问题的最后一句:

  

另外,我不想自己反序列化DummyObject。

您可以尝试更新输出模型(不确定从性能角度来看是否有益):

Class Output {
  private List<Map<String, String>> key;
  // setter, getting ommited
}