我在发布之前搜索过Stack Overflow,但杰克逊没有解决方案。
这是服务器响应:
{
"ok": true,
"result": [
{
"update_id": 489881731,
//rest
},
{
"update_id": 489881732,
//rest
}
]
}
如您所见,属性"result"
是一个数组。
现在这是另一个回应:
{
"ok": true,
"result": {
"id": 211948704,
"first_name": "ربات ادمینهای تلگرام",
"username": "tgAdminsBot"
}
}
此处"result"
是单个对象。
这是我的课程,我想将内容反序列化。我当然为TObject
写了一个自定义反序列化器:
public class Result
{
private TObject[] result;
private boolean ok;
public void setOk (boolean ok) {//code}
public void setResult (TObject[] result) {//code}
public TObject[] getResult () {//code}
public boolean getOk (){//code}
}
所以我在课堂上假设“result"
是TObject
s的数组。现在我该怎么办?正在使用@JsonProperty("result")
两个字段,其中一个是数组TObject
和一个TObject
确定? <
em
如果不是我还能做什么?
答案 0 :(得分:6)
如果您同时启用DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY
{"result": []}
和
{"result": {}}
可以解析为
class Result{
List result;
}
确定强制非数组是否可接受的功能 (在JSON中)值用于Java集合(数组, java.util.Collection)类型。如果启用,收集反序列化器将 尝试处理非数组值,就好像它们有&#34;隐含&#34;周围 JSON数组。此功能旨在用于 兼容性/互操作性的原因,与包一起工作(如 XML-to-JSON转换器)在那种情况下遗漏了JSON数组 只是数组中的单个元素。默认情况下禁用功能。
演示如何将它用于OP输入jsons和POJO:
ObjectMapper mapper = new ObjectMapper()
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
Result result = mapper.readValue(Result.class;
如果您因某种原因不喜欢mapper版本,可以在课程或字段上方使用@JsonFormat
@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
PS。关于此问题的其他SO问题:LINK