2017-12-05 17 views
0

Jackson에서는 안전하게 JSON 문자열로 JsonNode를 캐스팅 할 수 있습니다.Jackson ObjectCodec에서 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이 작업을 수행하는 것이 가능하며 나는 ObjectCodeObjectMapper에 캐스트 할 수있는 정상적인 상황에서 알고 있지만, 매우 깨끗 될 것 같지 않습니다.

또한 것이 가능 payload.toString()을 할 수 있지만, 문서 상태 다음 노드의 개발자 읽을 수있는 표현을 생산합니다

방법; 일 수도 있고이 유효한 JSON이 아닐 수도 있습니다. 유효한 JSON 출력 (또는 다른 Jackson 지원 데이터 형식 중 하나를 사용하여 출력 된 데이터 형식)은 인스턴스를 직렬화하기 위해 {ObjectMapper} 또는 {@link ObjectWriter}를 사용하십시오. 예를 들면 다음과 같습니다. String json = objectMapper .writeValueAsString (rootNode);

따라서이 중 하나를 사용하는 것은 안전하지 않습니다.

내가 볼 수있는 마지막 가능성은 새로운 ObjectMapper을 만드는 것이지만, 나에게는 매우 효율적이지 않습니다.

답변

1

하나의 가능성은 JsonGenerator을 생성하고 사용하는 것이 ObjectCodec.writeTree :

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