Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将JSON数组解析为java对象_Java_Json_Jackson - Fatal编程技术网

将JSON数组解析为java对象

将JSON数组解析为java对象,java,json,jackson,Java,Json,Jackson,我正在尝试使用Jacksonmapper解析大型JSON到java对象。我有非常大的JSON,但在其中遇到了这个小片段,不知道如何解析。 这是JSON,它的格式看起来有点不同。我试图理解如何将其解析为对象 { "coordinates": [ [ [ -72.943068, 45.842298 ], [ -

我正在尝试使用
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]
NEXT ARRAY NODE
First: -72.943068
Second: 45.842298

NEXT ARRAY NODE
First: -72.943075
Second: 45.841859
解决方案2:
但是如果你的<代码> JSON<代码>真的很大,你不能把它加载到内存中,你应该考虑。在这种情况下,您不应创建POJO类并尝试按“节点”处理每个元素“节点”:

以上程序打印:

[-72.943068, 45.842298], [-72.943075, 45.841859]
NEXT ARRAY NODE
First: -72.943068
Second: 45.842298

NEXT ARRAY NODE
First: -72.943075
Second: 45.841859

在我的示例中,我在
2.2.3
版本中使用了
Jackson

创建一个json pojo映射器类

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"coordinates"
})
public class Example {

@JsonProperty("coordinates")
private List<List<List<Double>>> coordinates = null;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

@JsonProperty("coordinates")
public List<List<List<Double>>> getCoordinates() {
return coordinates;
}

@JsonProperty("coordinates")
public void setCoordinates(List<List<List<Double>>> coordinates) {
this.coordinates = coordinates;
}

@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}

@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}

}

这将是一个包含
double[][][]
的对象?请看我想知道该对象的外观如何?这看起来像一个GeoJSON坐标。你想做什么?用POJO映射它?直接走JSON?杰克逊两者都能做到