有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Jackson ObjectCodec到字符串json

有了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(),但文档说明:

Method that will produce developer-readable representation of the node; which may or may not be as valid JSON. If you want valid JSON output (or output formatted using one of other Jackson supported data formats) make sure to use {@link ObjectMapper} or {@link ObjectWriter} to serialize an instance, for example: String json = objectMapper.writeValueAsString(rootNode);

所以这也不安全

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


共 (1) 个答案

  1. # 1 楼答案

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

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