如何将嵌套数组中的值映射到属性

时间:2020-07-09 00:48:36

标签: java json spring jackson

我正在尝试解析json并在数组中获取值-

 {
  "hits": {
    "hits": [
      {
        "name": [
          {
            "family": "Doe",
            "given": "Jon",
            "middle": "Smith",
            "use": "Commercial"
          }
        ]
      }
    ]
  }
}

我意识到我在根级别还有一个数组,因此我决定先解析一个列表的hits,然后再解析另一个列表的name。我可以在响应中看到整个名称数组,但我宁愿只希望看到映射到given

fstNm
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");
        

    }

预期输出-

{
"fstNm": "Jon"
}

在这里,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

只需如下更改setFstNm()方法

@JsonProperty("hits")
public void setFstNm(Map<String, List<Map<String, Object>>> hits) {

    name = (List) hits.get("hits").get(0).get("name");
    this.fstNm = (String) name.get(0).get("given");
}

答案 1 :(得分:0)

不确定为什么名称必须与匹配项相同

  private List<Map<String,Object>> name;

我认为您可以通过将name声明为

来获得name的所有值
 `ArrayList<String> name;`

您可以在此处尝试设置类似的名称

ArrayList<String> name = (List) hits.get(0).get("name");

然后,您可以创建一个get方法来获取名称,然后像在您的setter中一样访问它

 ArrayList<String> name = getName();
    fstNm = name.get(2);