Я пытаюсь разобрать с помощью Jackson
mapper для синтаксического анализа большого JSON для java-объекта. У меня очень большой JSON, но наткнулся на этот маленький кусок в нем и не уверен, как разбираться.
Вот JSON, формат которого выглядит немного иначе. Я пытаюсь понять, как я могу разобрать его на объект.
{
"coordinates": [
[
[
-72.943068,
45.842298
],
[
-72.943075,
45.841859
]
]
]
}
Я не понимаю, в каком формате он находится, и как я могу разобрать его на объект.
Это зависит от того, насколько велик ваш 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
.