2017-04-05 1 views
1

지도가있는 샘플 pojo가 있습니다.Jackson을 사용하여 JSON ("key": "value", "key1": "value1"}을 "key": 값, "key1": "value1"Java 맵에 매핑

class Sample { 
    private Integer id; 
    private String name; 
    private Map<String,Object> map; 
    public Map<String,Object> getMap() { 
    return map; 
    } 
    public void setMap(Map<String, Object> map) { 
    this.map = map; 
    } 
    public Integer getId() { 
    return id; 
    } 
    public void setId(Integer id) { 
    this.id = id; 
    } 
    public String getName() { 
    return name; 
    } 
    public void setName(String name) { 
    this.name = name; 
    } 
} 

이 POJO를 Jackson을 사용하여 JSON으로 작성하면 다음과 같은 결과가 나타납니다. 사용자 정의 시리얼 라이저를 사용하지 않고 할 수있는 방법이

{ 
    "id" : 1234, 
    "name" : "abc", 
    "map" : { 
    "key1" : { 
     "field" : "value", 
     "field1" : "value" 
    }, 
    "key2" : [ 
     { 
      "something" : "a", 
      "somethingElse" : 1 
     }, 
     { 
      "something" : "b", 
      "somethingElse" : 2 
     } 
    ] 
    } 
} 

나는이지도

{ 
    "id" : 1234, 
    "name" : "abc", 
    "key1" : { 
     "field" : "value", 
     "field1" : "value" 
    }, 
    "key2" : [ 
    { 
     "something" : "a", 
     "somethingElse" : 1 
    }, 
    { 
     "something" : "b", 
     "somethingElse" : 2 
    } 
    ] 
} 

로 작성하고 싶은 동안 있습니까? 당신이 잭슨을 사용할 수있는 경우

+2

왜지도에 래퍼 클래스가 있습니까? 직접 JSON을 얻으려면 맵을 직렬화 할 수 없습니까? –

+1

그래서 그냥 외부 "지도"를 없애고 싶습니다 : {...}'? 이 경우 랩퍼가 아닌 맵 자체를 직렬화하면됩니다. 해당 래퍼가 다른 필드도 포함하는 경우 해당 "맵"수준을 제거하지 않는 것이 좋습니다. – Thomas

+0

@ 토마스 예 "지도"를 제거하고 싶습니다 : {...}. 그리고 mixin이나 jackon의 propertyNamingStrategy와 같은 맞춤식 시리얼 라이저 이외의 옵션을 탐색 중입니다 –

답변

2

, 다음 코드보다 당신을 도울 수 있습니다 :

class Sample { 

    private Map<String,Object> map = new HashMap<>(); 
    @JsonAnyGetter 
    public Map<String,Object> getMap() { 
    return this.map; 
    } 
    public void setMap(Map<String, Object> map) { 
    this.map = map; 
    } 
    @JsonAnySetter 
    public void addValue(String key, Object value) { 
    this.map.put(key, value); 
    } 
} 

을이 경우 이것은 그들의 키로 저장 (또는 취득) 값을 모든 알 수없는 필드.

+0

완벽 해이 솔루션은 저에게 효과적이었습니다. –