【问题标题】:Jackson ObjectCodec to string json杰克逊 ObjectCodec 到字符串 json
【发布时间】:2017-12-05 12:12:22
【问题描述】:

对于 Jackson,我如何安全地将 JsonNode 转换为 JSON 字符串。

public class WrappedMessage extends JsonDeserializer<WrappedMessage> {
    @Override
    public WrappedMessage deserialize(JsonParser jp, DeserializationContext ctxt)
            throws IOException {
        ObjectCodec codec = jp.getCodec();

        JsonNode node = codec.readTree(jp);
        JsonNode payload = node.get("payload");
        // How to get the payload as JSON

        return new WrappedMessage();
    }
}

使用ObjectMapper#writeValueAsString 可以做到这一点,我知道在正常情况下ObjectCode 可以转换为ObjectMapper,但似乎不是很干净。

也可以使用payload.toString(),但文档说明:

将生成开发人员可读表示的方法 节点;这可能也可能不是有效的JSON。如果你想要有效 JSON 输出(或使用其他支持的 Jackson 之一格式化的输出) 数据格式)确保使用 {@link ObjectMapper} 或 {@link ObjectWriter} 来序列化一个实例,例如:String json = objectMapper.writeValueAsString(rootNode);

所以这也不安全。

我看到的最后一种可能性是构造一个新的ObjectMapper,但对我来说似乎效率不高。

【问题讨论】:

    标签: java jackson jackson-databind


    【解决方案1】:

    一种可能性是创建一个JsonGenerator 并使用ObjectCodec.writeTree

    StringWriter writer = new StringWriter();
    JsonGenerator jgen = codec.getFactory().createGenerator(writer);    
    codec.writeTree(jgen, payload);
    String jsonPayload = writer.toString();
    

    【讨论】:

      猜你喜欢
      • 2014-03-05
      • 1970-01-01
      • 2016-10-28
      • 1970-01-01
      • 2013-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多