繁体   English   中英

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

[英]Spring Jackson convert json object to java array

我有一个像下面的json:

{“ key”:{“ a”:“ aValue”}}

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

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

所以,我想如果json是

{“ key”:[{“ a”:“ val1”},{“ a”:“ val2”}]}

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

{“ key”:{“ a”:“ val1”}}

“键”应仅包含1个对象的列表。

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

尝试启用Jackson的反序列化功能ACCEPT_SINGLE_VALUE_AS_ARRAY

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

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

问题不在输出模型中;

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

由于此key将该key表示为json数组。

但是您可能想要更新DummyObject:

Class DummyObject {
  private String a;
}

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

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


另外,如@tima所指出的,对于“键”的JSONArray长度不同,您必须了解如何使Jackson将单个JSON对象解释为具有一个元素的数组


您问题的最后一句:

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

您可以尝试更新输出模型(从性能角度来看不确定是否会有所帮助),如下所示:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM