当 JsonProperty 有时是数组有时是单个对象时,Jackson 反序列化
Jackson desrialize when JsonProperty is sometimes array and sometimes a single Object
我在发帖前搜索了 Stack Overflow,但没有针对 Jackson 的解决方案。
这是服务器响应:
{
"ok": true,
"result": [
{
"update_id": 489881731,
//rest
},
{
"update_id": 489881732,
//rest
}
]
}
如你所见 属性 "result"
是一个数组。
现在这是另一个回应:
{
"ok": true,
"result": {
"id": 211948704,
"first_name": "ربات ادمینهای تلگرام",
"username": "tgAdminsBot"
}
}
这里"result"
是一个对象。
这是我的 class 我想反序列化它的内容。当然,我为 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}
}
所以我在 class 中假设“result"
是 TObject
的数组。现在我能做什么?正在使用 @JsonProperty("result")
对于两个字段,一个是 TObject
的数组,一个是单个 TObject
OK?
如果不行我还能做什么?
如果您同时启用 DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY
{"result": []}
和
{"result": {}}
可以解析为
class Result{
List result;
}
Feature that determines whether it is acceptable to coerce non-array
(in JSON) values to work with Java collection (arrays,
java.util.Collection) types. If enabled, collection deserializers will
try to handle non-array values as if they had "implicit" surrounding
JSON array. This feature is meant to be used for
compatibility/interoperability reasons, to work with packages (such as
XML-to-JSON converters) that leave out JSON array in cases where there
is just a single element in array. Feature is disabled by default.
演示如何将其用于 OP 输入 json 和 POJO:
ObjectMapper mapper = new ObjectMapper()
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
Result result = mapper.readValue(Result.class;
可以与 class 以上的 @JsonFormat
一起使用,如果您出于某种原因不喜欢映射器版本,则可以与字段一起使用
@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
PS。关于这个问题的其他问题:LINK
我在发帖前搜索了 Stack Overflow,但没有针对 Jackson 的解决方案。
这是服务器响应:
{
"ok": true,
"result": [
{
"update_id": 489881731,
//rest
},
{
"update_id": 489881732,
//rest
}
]
}
如你所见 属性 "result"
是一个数组。
现在这是另一个回应:
{
"ok": true,
"result": {
"id": 211948704,
"first_name": "ربات ادمینهای تلگرام",
"username": "tgAdminsBot"
}
}
这里"result"
是一个对象。
这是我的 class 我想反序列化它的内容。当然,我为 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}
}
所以我在 class 中假设“result"
是 TObject
的数组。现在我能做什么?正在使用 @JsonProperty("result")
对于两个字段,一个是 TObject
的数组,一个是单个 TObject
OK?
如果不行我还能做什么?
如果您同时启用 DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY
{"result": []}
和
{"result": {}}
可以解析为
class Result{
List result;
}
Feature that determines whether it is acceptable to coerce non-array (in JSON) values to work with Java collection (arrays, java.util.Collection) types. If enabled, collection deserializers will try to handle non-array values as if they had "implicit" surrounding JSON array. This feature is meant to be used for compatibility/interoperability reasons, to work with packages (such as XML-to-JSON converters) that leave out JSON array in cases where there is just a single element in array. Feature is disabled by default.
演示如何将其用于 OP 输入 json 和 POJO:
ObjectMapper mapper = new ObjectMapper()
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
Result result = mapper.readValue(Result.class;
可以与 class 以上的 @JsonFormat
一起使用,如果您出于某种原因不喜欢映射器版本,则可以与字段一起使用
@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
PS。关于这个问题的其他问题:LINK