配置json解析器以解析json中的转义json字符串

时间:2019-05-22 07:36:15

标签: json parsing

假设您具有以下json代码段

ERROR_ALREADY_EXISTS

乍看之下,似乎{ "topic":"foo", "payload":"{\"type\":\"String\",\"value\":\"44\"}", "type":"ItemStateEvent" } 已两次转换为json字符串。天真的方法是在整个代码段上两次调用解析函数。第一次是整个事件,第二次是payload字段。

现在要提出的问题是:如何配置所选的解析器,以便它可以为您做些琐碎的工作?

1 个答案:

答案 0 :(得分:0)

Jackson,java json解析库,似乎支持每个字段反序列化器。结果,您可以将@JsonDeserialize(using = NestedDeserializer.class)添加到特定的“嵌套” json字段。 NestedDeserializercom.fasterxml.jackson.databind.JsonDeserializer的实现。目前,我正在尝试以下实现:

    @Override
    public LinkedHashMap<String, String> deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
        ObjectMapper m  = (ObjectMapper) p.getCodec(); // am I sure that codec will always be ObjectMapper?
        TextNode textNode = m.readTree(p);
        LinkedHashMap<String, String> datum = m.readValue(textNode.asText(), LinkedHashMap.class);
        return datum;
    }

代码段的作用是将当前令牌反序列化为字符串,然后再次通过解析器运行它。