假设我从服务器返回以下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=1
和url=ONE
的Temp对象
images.get("one")
如果我致电,应该返回包含字段id=2
和url=TWO
的Temp对象
images.get("two")
答案 0 :(得分:3)
这应该按原样运行,只需要一个小修改:你正在使用额外的“响应”条目。所以通常你会使用包装器POJO,如:
class Wrapper {
public MSShow response;
}
正确地映射结构。或者您可以使用UNWRAP_ROOT_VALUE
功能(来自DeserializationConfig
)自动执行此操作,但如果类的名称需要匹配,则可以匹配。
如果字段类型是({是}),结果确实是HashMap
。如果不是,你也可以使用:
@JsonDeserialize(as=HashMap.class)
强制使用特定的子类型。