将Json字符串映射到java中的map或hashmap字段

时间:2012-02-15 01:38:33

标签: java json dictionary jackson

假设我从服务器返回以下JSON字符串:

{
    "response":{
        "imageInstances":{
            "one":{
                "id":"1",
                "url":"ONE"
            },         
            "two":{
                "id":"2",
                "url":"TWO"
            }
        }
    }  
}

在codehaus Jackson @JsonProperty中,如何从中获取HashMap个对象?

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字符串生成哈希映射 (用java伪写的)

如果我致电

应该返回包含字段id=1url=ONE的Temp对象

images.get("one")
如果我致电

应该返回包含字段id=2url=TWO的Temp对象

images.get("two") 

1 个答案:

答案 0 :(得分:3)

这应该按原样运行,只需要一个小修改:你正在使用额外的“响应”条目。所以通常你会使用包装器POJO,如:

class Wrapper {
  public MSShow response;
}

正确地映射结构。或者您可以使用UNWRAP_ROOT_VALUE功能(来自DeserializationConfig)自动执行此操作,但如果类的名称需要匹配,则可以匹配。

如果字段类型是({是}),结果确实是HashMap。如果不是,你也可以使用:

@JsonDeserialize(as=HashMap.class)

强制使用特定的子类型。