我正在尝试解析json并在数组中获取值-
{
"hits": {
"hits": [
{
"name": [
{
"family": "Doe",
"given": "Jon",
"middle": "Smith",
"use": "Commercial"
}
]
}
]
}
}
下面是我的情话
private String fstNm;
public String getFstNm() { return fstNm; }
@JsonProperty("name")
public void setFstNm(Map<String,Object>name) {
this.fstNm = (String) name.get("given");
}
但是由于某种原因,它无法正常工作,我从START_OBJECT令牌中提取了Cannot deserialize instance of java.lang.String
,
我将不胜感激。
答案 0 :(得分:2)
基于JSON,名称实际上是一个列表,因此您应该映射:
@JsonProperty("name")
public void setFstNm(List<Map<String, Object>> name) {
this.fstNm = (String) name.get(0).get("given");
}
这是从数组的第一个位置“赋予”属性。当然,您需要先检查列表是否为空,以及是否真的想要第一个。
[更新]
对于上面指定的新JSON,解析的另一种方法是:
@JsonProperty("hits")
public void setFstNm(Map<String, List<Map<String, List<Map<String, Object>>>>> hits) {
this.fstNm = (String) hits.get("hits").get(0).get("name").get(0).get("given");
}
或者,如果您使用ObjectMapper进行解析,则可以轻松阅读:
JsonNode jsonNode = new ObjectMapper().readTree(<<JSON>>);
String givenName = jsonNode.get("hits").get("hits").get(0)
.get("name").get(0).get("given").asText();
答案 1 :(得分:0)
private String fstNm;
private List<Map<String,Object>> name;
public String getFstNm() { return fstNm; }
@JsonProperty("hits")
public void setFstNm(List<Map<String, Object>> hits) {
name = (List) hits.get(0).get("name");
this.fstNm= (String) name.get(0).get("given");
}