Разбор массива JSON в объект Java

1

Я пытаюсь разобрать с помощью Jackson mapper для синтаксического анализа большого JSON для java-объекта. У меня очень большой JSON, но наткнулся на этот маленький кусок в нем и не уверен, как разбираться.
Вот JSON, формат которого выглядит немного иначе. Я пытаюсь понять, как я могу разобрать его на объект.

{
    "coordinates": [
        [
            [
                -72.943068,
                45.842298
            ],
            [
                -72.943075,
                45.841859
            ]
        ]
    ]
}

Я не понимаю, в каком формате он находится, и как я могу разобрать его на объект.

Теги:
jackson

1 ответ

1
Лучший ответ

Это зависит от того, насколько велик ваш JSON. Если вы можете загрузить его в память, вы можете использовать простейший способ: Решение 1:
Класс POJO:

class CoordinatesContainer {

    private double[][][] coordinates;

    public double[][][] getCoordinates() {
        return coordinates;
    }

    public void setCoordinates(double[][][] coordinates) {
        this.coordinates = coordinates;
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder(1024);
        for (double[] arrayItem : coordinates[0]) {
            builder.append(Arrays.toString(arrayItem));
            builder.append(", ");
        }
        return builder.toString();
    }
}

Применение:

ObjectMapper mapper = new ObjectMapper();
CoordinatesContainer coordinatesContainer = mapper.readValue(json, CoordinatesContainer.class);
System.out.println(coordinatesContainer);

Над печатью программы:

[-72.943068, 45.842298], [-72.943075, 45.841859]

Решение 2:
Но если ваш JSON действительно большой, и вы не можете загрузить его в память, вы должны рассмотреть функцию потокового воспроизведения Jackson. В этом случае вам не следует создавать класс POJO и пытаться обрабатывать каждый элемент "узел" с помощью "узла":

import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Arrays;

import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;

public class JsonProgram {

    public static void main(String[] args) throws IOException {
        File json = new File("/x/data.json");
        JsonFactory jsonFactory = new JsonFactory();
        JsonParser parser = jsonFactory.createParser(json);
        // Skip all elements to first array
        while (parser.nextToken() != JsonToken.START_ARRAY) {
        }
        parser.nextToken();
        // First level
        while (parser.nextToken() != JsonToken.END_ARRAY) {
            // Skip inner start array element
            parser.nextToken();
            System.out.println();
            System.out.println("NEXT ARRAY NODE");

            BigDecimal first = parser.getDecimalValue();

            // Go to second value
            parser.nextToken();

            BigDecimal second = parser.getDecimalValue();

            // Skip inner end array element
            parser.nextToken();

            // Handle array item
            System.out.println("First: " + first.toString());
            System.out.println("Second: " + second.toString());
        }
    }
}

Над печатью программы:

NEXT ARRAY NODE
First: -72.943068
Second: 45.842298

NEXT ARRAY NODE
First: -72.943075
Second: 45.841859

В моих примерах я использовал версию Jackson в версии 2.2.3.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню