我需要实现自定义反序列化器才能正确解析JSON到Java对象。正如documentation中所指定的,我需要用我的自定义替换默认的JSONReader:
JSON j = JSON.std.with(new MyJSONReader());
但有两个问题:
JSONReader没有默认构造函数;
没有文档说明如何使用JSONReader。
如何在Jackson jr中创建自定义反序列化器?
答案 0 :(得分:2)
感谢Rahim Dastar的回答,但Jackson jr还没有JsonDeserializer课程。因为Jackson jr是杰克逊的缩减版。
我在阅读question后制作技巧。
我使用Map而不是自定义Java类。然后我使用显式转换自定义setter方法:
//private Data data; - this is desired
private Map<String, Object> data;
public void setData(Object Data) {
if(data instanceof Map){
this.data = (Map<String, Object>) data;
} else {
this.data = null;
}
}
这有效,但不是解决方案,因为我有很多具有多个字段的类。
答案 1 :(得分:0)
我用这个:
public class IntegerBooleanDeserializer extends JsonDeserializer<Boolean> {
@Override
public Boolean deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException
{
Integer data = Integer.parseInt(jsonParser.readValueAs(String.class));
return data == 1 ? true : false;
}
}
@JsonDeserialize(using = IntegerBooleanDeserializer.class)
boolean force;
对于布尔自定义序列化程序,您可以将它用于每个对象。
答案 2 :(得分:0)
Jackson-jr 2.10增加了对注册自定义读者(ValueReader
)和作家(ValueWriter
)的支持,如下所示:
https://medium.com/@cowtowncoder/jackson-2-10-jackson-jr-improvements-9eb5bb7b35f