Как сопоставить значение во вложенном массиве со свойством - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь проанализировать json и получить значение внутри массива -

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

Я понял, что у меня есть еще один массив на уровне root, поэтому я решил проанализировать 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 ]

1 голос
/ 09 июля 2020

Просто измените метод 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");
}
0 голосов
/ 09 июля 2020

Не уверен, почему у вас должно быть имя того же типа объекта, что и хиты

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

Я думаю, вы можете sh получить все значения имени, объявив его как

 `ArrayList<String> name;`

Оттуда вы можете попытаться установить имя, например,

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

Затем вы можете создать метод get для получения имени, а затем получить к нему доступ в своем сеттере, например

 ArrayList<String> name = getName();
    fstNm = name.get(2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...