将JSON数组解析为Java对象

奥利弗·奥克利

我正在尝试使用Jackson映射器进行解析以将大JSON解析为java对象。我有一个很大的JSON,但遇到了其中的这一小片段,不确定如何解析。
这是JSON,其格式看起来几乎没有什么不同。我试图了解如何将其解析为对象。

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

我不知道它采用的是哪种格式,以及如何将其解析为对象。

米恰尔·乔伯(MichałZiober)

这取决于你的身材有多大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 Streaming API在这种情况下,您不应创建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

在我的示例中,我使用Jackson2.2.3版本。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将Json解析为Java对象

来自分类Dev

将Json解析为Java对象

来自分类Dev

使用GSON将JSON解析为Java对象

来自分类Dev

将Json数组中的对象解析为字典Swift

来自分类Dev

如何使用嵌套数组将JSON解析为对象

来自分类Dev

如何使用GSON将json对象数组解析为JAVA二维数组?

来自分类Dev

将JSON数组解析为Swift数组

来自分类Dev

AngularJS将递归JSON解析为对象数组

来自分类Dev

将JSON对象数组解析为TypeScript对象数组

来自分类Dev

将JSON对象解析为VueJs2中的数组,然后渲染数组以选择选项

来自分类Dev

如何使用Jsonb将JSON中的数值数组解析为Java对象

来自分类Dev

Java GSON无法解析为对象数组

来自分类Dev

将JSON解析为对象数组以进行React状态挂钩

来自分类Dev

GSON将数组数组解析为对象的Java数组

来自分类Dev

将JSON解析为对象数组

来自分类Dev

将JSON对象解析为Java中的字符串

来自分类Dev

将JSON解析为对象

来自分类Dev

Android Java将Json从URL解析为对象列表

来自分类Dev

Gson将长度为1的json数组解析为JsonArray对象而不是JsonObject对象

来自分类Dev

将JSON解析为Java对象

来自分类Dev

启用将json数组解析为数组

来自分类Dev

Gson-将JSON对象的JSON数组解析为ArrayList <org.json.JSONObject>

来自分类Dev

将 JSON 解析为对象

来自分类Dev

将 JSON 解析为数组

来自分类Dev

将日期 JSON 对象解析为 Java

来自分类Dev

如何在get方法后将json对象数组解析为typescript(对象)

来自分类Dev

使用 GSON 将 JSON 嵌套对象解析为 Java POJO

来自分类Dev

将 JSON 数组解析为 JSON 对象时出错

来自分类Dev

将(非标准)json 解析为数组/对象