Начните анализ внутри вложенного объекта JSON с Джексоном - PullRequest
0 голосов
/ 09 января 2019

У меня следующая структура JSON:

{
  "uri": {
    "{{firstname}}": "Peter",
    "{{lastname}}": "Griffin",
    "{{age}}": 42
  }
}

Я хочу десериализовать его в свой Боб:

public class Uri {

    private String firstname;
    private String lastname;
    private int age;

    /* getter and setter */
}

Но я получаю следующую ошибку:

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "uri" (class com.abc.Uri), not marked as ignorable (3 known properties: "firstname", "lastname", "age")

Итак, я полагаю, мне нужно получить в свойство uri.

Есть ли способ начать синтаксический анализ непосредственно в свойстве uri?

Обновление:

Вот как я читаю JSON:

ObjectMapper mapper = new ObjectMapper();
uri = mapper.readValue(new URL("test2.json"), Uri.class);

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Ваш метод не будет работать, потому что вы пытаетесь получить весь объект json сразу, без получения сначала определенного узла.

Вместо загрузки вашего json с помощью конструктора mapper, получите ваш json другим способом. Я бы использовал URL и HTTPURLConnection, чтобы получить строку json из Интернета.

После того, как у вас есть строка json, используйте это:

 ObjectMapper objectMapper = new ObjectMapper();
 JsonNode rootNode = objectMapper.readTree(json);

Получите узел json, который представляет uri, например:

JsonNode uriNode = rootNode.get("uri");

И только затем отправьте этот узел на анализ, например:

Джексон 2,4

Uri uri = objectMapper.treeToValue(uriNode, Uri.class);

До Джексона 2,4

Uri uri = objectMapper.readValue(uriNode, Uri.class);
0 голосов
/ 09 января 2019

Вы JSON должны иметь формат:

{
  "uri": {
    "firstname": "Peter",
    "lastname": "Griffin",
    "age": 42,
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...