2012-02-15 5 views
2

나는 다음과 같은 JSON 문자열이 서버에서 반환 말해봐? 하루의 끝에서맵핑 JSON 문자열은

import org.codehaus.jackson.annotate.JsonAnySetter; 
import org.codehaus.jackson.annotate.JsonProperty; 

import java.util.HashMap; 
import java.util.List; 

public class MSShow { 
    @JsonProperty("imageInstances") private HashMap<String, Temp> images;//// HOW DO YOU CONVERT IT TO HASH MAP?????? 
    @JsonAnySetter public void ignoredField(String key, Object value) { } 

    private class Temp { 
    @JsonProperty("id") private String id; 
    @JsonProperty("url") private String url; 
    @JsonAnySetter public void ignoredField(String key, Object value) { } 
    } 
} 

, 나는 해시 맵이 를로 반환 된 JSON 문자열을 기반

는 필드 id=1url=ONE으로 나에게 임시 객체를 반환해야합니다 (자바 의사로 작성) 생성합니다 내가

를 호출하는 경우
images.get("one") 

나에게 내가

를 호출하는 경우 필드 id=2url=TWO와 임시 객체를 반환해야합니다
images.get("two") 
+0

심각한 검색이나 테스트를 수행하지 않았지만, Jackson이 내포 된 클래스 'Temp'가 개인용이고 b) 내부 클래스 (정적이 아닌 클래스)에 문제가있을 수 있다고 말하고 싶습니다. 따라서 MediaSlideShow를 포함하는 인스턴스에 바인딩됩니다. 그래서 저는'Temp'을'public static'으로 만들기 시작할 것입니다. –

+0

그리고 특별히 'HashMap'이 필요합니까? 그렇지 않다면'Map '를 대신 고려하여 Jackson이 사용할 구현에 대해 걱정하게하십시오. –

+0

감사합니다 봉오리! 당신의 답변에 감사드립니다 – user1118019

답변

3

하나의 작은 수정으로 그대로 작동해야합니다. 추가 "응답"항목을 사용하고 있습니다. 따라서 일반적으로 다음과 같은 래퍼 POJO를 사용합니다.

class Wrapper { 
    public MSShow response; 
} 

구조를 올바르게 매핑 할 수 있습니다. 또는 UNWRAP_ROOT_VALUE 지형지 물 (DeserializationConfig)을 사용하여 자동으로 처리 할 수 ​​있습니다. 그렇다면 클래스 이름과 일치해야합니다.

필드 유형이 (해당되는 경우) 결과는 실제로 HashMap입니다. 그렇지 않은 경우 다음을 사용할 수도 있습니다.

@JsonDeserialize(as=HashMap.class) 

특정 하위 유형을 사용하도록 강제 할 수 있습니다.