杰克逊jr定制解串器

时间:2015-12-04 16:26:46

标签: android jackson json-deserialization

我需要实现自定义反序列化器才能正确解析JSON到Java对象。正如documentation中所指定的,我需要用我的自定义替换默认的JSONReader:

JSON j = JSON.std.with(new MyJSONReader());

但有两个问题:

  • JSONReader没有默认构造函数;

  • 没有文档说明如何使用JSONReader。

如何在Jackson jr中创建自定义反序列化器?

3 个答案:

答案 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