【问题标题】:How to map a value in an nested array to a property如何将嵌套数组中的值映射到属性
【发布时间】:2020-07-09 00:48:36
【问题描述】:

我正在尝试解析 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"
}

如果有任何帮助,我将不胜感激。

【问题讨论】:

  • 你能添加预期的输出吗
  • @deadshot 我已经添加了预期的输出
  • 你试过@Jsonignore
  • @deadshot 我刚刚做了,它忽略了命中,但我如何将值从给定的字段映射到 fstNm ?
  • 您发布的代码是否有效?

标签: java json spring jackson


【解决方案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");
}

【讨论】:

    【解决方案2】:

    不知道为什么你必须让 name 与 hits 的对象类型相同

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

    【讨论】:

    • 我尝试了你的建议,但我得到的是空值,即 null
    猜你喜欢
    • 2016-08-28
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 2013-07-17
    • 2011-10-04
    • 1970-01-01
    相关资源
    最近更新 更多