如何使用RestTemplate解析没有键的json值?

时间:2019-07-14 09:55:03

标签: java json spring-boot resttemplate

我想解析json值,但是有些值没有键。

像这样

"geometry": {
                "type": "LineString",
                "coordinates": [
                    [
                        127.08373748622218,
                        37.529508099979225
                    ],
                    [
                        127.08355138558433,
                        37.529735847943925
                    ]
                ]
            }

Geometry.class

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@ToString
public class Geometry {
    private String type;
    private Coordinate coordinates;
}

Coordinate.class

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@ToString
public class Coordinate {
    private List<Double[]> xy;
}

然后我看到了这个错误

Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `kr.seoulmaas.ieye.service.dto.path.walk.Coordinate` out of START_ARRAY token
 at [Source: (PushbackInputStream); line: 1, column: 133] (through reference chain: kr.seoulmaas.ieye.service.dto.path.WalkPathResDto["features"]->java.util.ArrayList[0]->kr.seoulmaas.ieye.service.dto.path.walk.Feature["geometry"]->kr.seoulmaas.ieye.service.dto.path.walk.Geometry["coordinates"])

3 个答案:

答案 0 :(得分:1)

private Coordinate coordinates;应该为private List<Coordinate> coordinates;,因为它是JSON中的数组,但是由于该数组仅包含数组,因此您需要具有列表列表:List<List<Double>> coordinates(由@JBNizet建议)。

答案 1 :(得分:0)

在您的数据中,coordinateslist中的list。因此,以这种方式定义您的Geometry类:

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@ToString
public class Geometry {
    private String type;
    private List<Coordinate> coordinates;
}

希望这会有所帮助。

答案 2 :(得分:0)

对不起,我来晚了。

我通过JsonNode解决了这个问题。

这是我的代码。

public class Geometry {
    private String type;
    private JsonNode coordinates;
}