使用杰克逊,我如何安全地将 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
,但对我来说似乎不是很有效。