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

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

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

Ниже мой pojo

private String fstNm;

 public String getFstNm() { return fstNm; }

    @JsonProperty("name")
    public void setFstNm(Map<String,Object>name) {
        this.fstNm = (String) name.get("given");

    }

Но по какой-то причине это не так работает, и я получаю Cannot deserialize instance of java.lang.String из токена START_OBJECT`

Буду признателен за любую помощь.

Ответы [ 2 ]

2 голосов
/ 09 июля 2020

Исходя из вашего 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();
0 голосов
/ 09 июля 2020
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");
        

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...