我有一个像下面这样的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
。
答案 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
}