Чтение значения JSON без использования JsonNode - PullRequest
0 голосов
/ 25 января 2019

Пример формата JSON выглядит следующим образом:

{
  myarray: [
    {
      id: 123,
      title: "my title",
      name: "my name"
    },
    {
      id: 456,
      title: "my title 2",
      name: "my name 2"
    }
  ]
}

Используя вышеупомянутый JSON, мы получили myarray, используя следующий код:

ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readValue(con.getInputStream(), JsonNode.class);
def stations = mapper.readValue(node.get("myarray"), MyClass[].class);

Через несколько дней мы обновили jsonбиблиотека и выбрасывание следующих исключений.

No signature of method: com.fasterxml.jackson.databind.ObjectMapper.readValue() is applicable for argument types: (com.fasterxml.jackson.databind.node.ArrayNode, java.lang.Class)

Есть ли способ или способ обойти объект myarray без использования JsonNode?

(Сейчас мы используем последнюю версию com.fasterxml.jackson.databind)

1 Ответ

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

Использование Jackson Databind версии 2.9.8.

compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.8'

Вам нужно найти myarray и затем проверить, является ли он массивом.После этого вы можете приступить к прохождению через своих детей.Где data.json - файл, содержащий данные JSON.

StationParser.java

import java.io.IOException;
import java.io.InputStream;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;

public class StationParser {
    public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
        InputStream ios = Library.class.getClassLoader().getResourceAsStream("data.json");
        ObjectMapper mapper = new ObjectMapper();
        ArrayNode data = (ArrayNode) mapper.readTree(ios).get("myarray");
        Station[] stations = mapper.readValue(data.traverse(), Station[].class);

        for (Station station : stations) {
            System.out.println(station);
        }
    }
}

Вывод

Station [id=123, title=my title, name=my name]
Station [id=456, title=my title 2, name=my name 2]

Station.java

public class Station {
    private long id;
    private String title;
    private String name;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return String.format("Station [id=%s, title=%s, name=%s]", id, title, name);
    }
}
...