使用Jackson图书馆从JSON获取嵌套数组-Java

时间:2018-08-10 12:43:26

标签: java json jackson

我有这样的JSON:

    {
        "result": [
            {
                "reservation_id": 101,
                "euro_fee": 11.00,
                "hotel_id": 1
            },
            {
                "reservation_id": 102,
                "euro_fee": 12.00,
                "hotel_id": 2
            },
            {
                "reservation_id": 103,
                "euro_fee": 13.00,
                "hotel_id": 3
            }
        ],
        "meta": {
            "ruid": "0001="
        }
    }

,我正在尝试使用Jackson(带有Spring Boot)进行解析和绑定。这是我的POJO:

Response.java

    public class Response {

        private Result result;
        private Meta meta;

        public Response() {
        }

        public Result getResult() {
            return result;
        }

        public void setResult(Result result) {
            this.result = result;
        }

        public Meta getMeta() {
            return meta;
        }

        public void setMeta(Meta meta) {
            this.meta = meta;
        }
    }

Meta.java

    public class Meta {

        private String ruid;

        public Meta() {
        }

        public String getRuid() {
            return ruid;
        }

        public void setRuid(String ruid) {
            this.ruid = ruid;
        }
    }

Result.java

    public class Result {

        private Booking[] results;

        public Result() {
        }

        public Booking[] getResults() {
            return results;
        }

        public void setResult(Booking[] results) {
            this.results = results;
        }
    }

Booking.java

    public class Booking {


        private long reservation_id;

        private long hotel_id;

        private Double euro_fee;

        public Booking() {
        }

        public long getReservation_id() {
            return reservation_id;
        }

        public void setReservation_id(long reservation_id) {
            this.reservation_id = reservation_id;
        }

        public long getHotel_id() {
            return hotel_id;
        }

        public void setHotel_id(long hotel_id) {
            this.hotel_id = hotel_id;
        }


        public Double getEuro_fee() {
            return euro_fee;
        }

        public void setEuro_fee(Double euro_fee) {
            this.euro_fee = euro_fee;
        }
    }

我可以使用以下方法从ruid获得meta

        // getting JSON from REST
        String response = restTemplate.postForObject(resourceURL, httpEntity, String.class);

        // use jackson
        ObjectMapper mapper = new ObjectMapper();
        Response theResponse = mapper.readValue(response, Response.class);
        System.out.println("getRuid: " + theResponse.getMeta().getRuid());

但是我无法从嵌套数组中获取对象或单个项目。当我尝试获取项目数组时,出现错误:

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of out of START_ARRAY token at [Source: (String)...

我知道这应该很容易,但是我是第一次使用Jackson,问题可能出在深处。

1 个答案:

答案 0 :(得分:2)

更改您的Response类。

尝试一下:

public class Response {

        private List<Booking> result;
        private Meta meta;
//getter setter
}