有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

我意识到我在根级别还有一个数组,所以我决定解析hits这是一个列表,然后解析name这是另一个列表。我可以在响应中看到整个名称数组,但我更希望只看到映射到fstNmgiven

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) 个答案

  1. # 1 楼答案

    不确定为什么必须使名称与命中的对象类型相同

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

    我认为通过将name声明为

     `ArrayList<String> name;`
    

    从那里,您可以尝试设置名称,例如

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

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

     ArrayList<String> name = getName();
        fstNm = name.get(2);
    
  2. # 2 楼答案

    只需更改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");
    }