2012-08-24 3 views
3

다음과 같은 Java Bean 클래스가 Jackson을 사용하여 JSON으로 변환됩니다. Map @ 값의 Jackson @JsonRawValue

public class Thing { 
    public String name; 

    @JsonRawValue 
    public Map content = new HashMap(); 
    } 

content

값은 다른 소스에서 원시 JSON 될 것입니다지도입니다. 예를 들어 :

String jsonFromElsewhere = "{ \"foo\": \"bar\" }"; 

Thing t = new Thing(); 
t.name = "test"; 
t.content.put("1", jsonFromElsewhere); 

JSON 생성 원하는입니다

{"name":"test","content":{1={ "foo": "bar" }}} 

는 내가 필요로하는 것은 단지에 대한지도의에 대한 @JsonRawValue을 지정하는 방법입니다 :

{"name":"test","content":{"1":{ "foo": "bar" }}} 

그러나에 @JsonRawValue 결과를 사용하여 값. 잭슨이 가능합니까?

+0

같은 문제 잭슨 2.9 –

답변

2

아니요. 사용자 정의 JsonSerializer을 쉽게 만들 수 있습니다.

또한, 어쩌면 오히려 단지 일회성 POJO를 사용 StaxMan가 지적 하듯이, 그것은 사용자 정의 JsonSerializer을 구현하기 매우 쉽게

public class RawHolder { 
    @JsonProperty("1") 
    public String raw; 
} 

public class Thing { 
    public String name; 
    public RawHolder content; 
} 
+0

나는 일회성 POJO 생각하지만 내 "1"증가하는 시퀀스 번호입니다. –

+0

아. 그걸로 판결이야. – StaxMan

5

. `@JsonRawValue 목록 `와

public class Thing { 
    public String name; 

    @JsonSerialize(using=MySerializer.class) 
    public Map<String, String> content = new HashMap<String, String>(); 
} 

public class MySerializer extends JsonSerializer<Map<String, String>> { 
    public void serialize(Map<String, String> value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { 
     jgen.writeStartObject(); 
     for (Map.Entry<String, String> e: value.entrySet()) { 
      jgen.writeFieldName(e.getKey()); 
      // Write value as raw data, since it's already JSON text 
      jgen.writeRawValue(e.getValue()); 
     } 
     jgen.writeEndObject(); 
    } 
}