Jackson ObjectCodec 到字符串 json
Jackson ObjectCodec to string 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
,但对我来说似乎效率不高。
一种可能是创建一个 JsonGenerator
并使用 ObjectCodec.writeTree
:
StringWriter writer = new StringWriter();
JsonGenerator jgen = codec.getFactory().createGenerator(writer);
codec.writeTree(jgen, payload);
String jsonPayload = writer.toString();
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
,但对我来说似乎效率不高。
一种可能是创建一个 JsonGenerator
并使用 ObjectCodec.writeTree
:
StringWriter writer = new StringWriter();
JsonGenerator jgen = codec.getFactory().createGenerator(writer);
codec.writeTree(jgen, payload);
String jsonPayload = writer.toString();