2017-12-05 2 views
0

Mit Jackson, wie kann ich sicher einen JsonNode zu einem JSON-String zu werfen.Jackson ObjectCodec zu string 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(); 
    } 
} 

Es ist möglich, dies mit ObjectMapper#writeValueAsString zu tun, und ich weiß, im normalen Kontext kann die ObjectCode-ObjectMapper gegossen werden, aber scheint nicht sehr sauber zu sein.

es auch möglich, zu tun payload.toString(), sondern die Dokumentation wird:

Methode, die Entwicklerlesbare Darstellung des Knoten erzeugen wird; was kann oder nicht als gültige JSON sein. Wenn Sie möchten, gültig JSON-Ausgang (oder Ausgangs formatiert über einen anderen Jackson Datenformate unterstützt) stellen Sie sicher, verwenden {@link ObjectMapper} oder {@link ObjectWriter} eine Instanz serialisiert werden, zum Beispiel: String json = objectMapper .writeValueAsString (rootNode);

Also ist dies nicht sicher zu verwenden.

Die letzte Möglichkeit, was ich sehe, ist, eine neue ObjectMapper zu konstruieren, scheint aber nicht sehr effizient zu mir.

Antwort

1

Eine Möglichkeit wäre, eine JsonGenerator zu erstellen und verwenden ObjectCodec.writeTree:

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