【发布时间】:2022-11-28 23:35:01
【问题描述】:
我正在尝试从 JSON 中反序列化两件事。第一个的格式如下:
String json = "[{\"name\":\"Random\"," +
"\"coordinates\":[[-3.1,55.4],[-3.1,55.9],[-3.7,55.3],[-3.8,55.7],[-3.0,55.8]]}]";
这是第二个:
String json2 = "[{\"name\":\"Random\"," + "\"longitude\":-3.1, \"latitude\":55}]
我的代码很简单,如下:
ObjectMapper mapper = new ObjectMapper();
var asArray = mapper.readValue(json, NoFlyZone[].class);
var asArray2 = mapper.readValue(json, LngLat.class);
NoFlyZone 类:
record NoFlyZone(LngLat[] coordinates) {
@JsonIgnoreProperties("name")
NoFlyZone (@JsonProperty("coordinates") double[][] coordinates) {
this(doubleArrayToLngLatArray(coordinates));
}
private static LngLat[] doubleArrayToLngLatArray(double[][] coordinates) {
var coordinateArray = new LngLat[coordinates.length];
for (int i = 0; i < coordinates.length; i++) {
coordinateArray[i] = new LngLat(coordinates[i][0], coordinates[i][1]);
}
System.out.println(coordinateArray);
return coordinateArray;
}
}
最后,LngLat 类:
record LngLat(double lng, double lat) {
LngLat (@JsonProperty("longitude") double lng,
@JsonProperty("latitude") double lat) {
this.lng = lng;
this.lat = lat;
}
}
我已经尝试以上面显示的方式反序列化它们,但是在尝试反序列化第一个字符串时抛出 MismatchedInputException,并显示错误消息“无法从数组值(令牌JsonToken.START_ARRAY)中反序列化 uk.ac.ed.inf.LngLat 类型的值...” .我不确定为什么会这样,所以任何帮助将不胜感激。
我也试过添加注释
@JsonFormat(shape = JsonFormat.Shape.ARRAY)
并按照亚历山大的回答中的详细说明对其进行修复,但随后第二个字符串在尝试反序列化时会抛出错误。
【问题讨论】:
标签: java arrays json multidimensional-array jackson