Jackson.Json.Can not deserialize instance of java.lang.String out of START_ARRAY token

557
16 августа 2017, 17:14

Есть такой JSON

{
"data": {
    "items": [
        {
            "id": "16116",
            "param_id": "45",
            "name": "Replay GN26 S R16x6.5 5x105 ET39.0 DIA56.6",
            "image": "http://img.wheelshop.com.ua/photo/wheels/b/replay-gn26-s_4691.png",
            "count": "1",
            "price": "2245",
            "car": []
        },

Вот я начинаю углубляться в него.

public class PjCart {
private PjCartItems data;
private String success;
public String getSuccess() {
    return success;
}
public void setSuccess(String success) {
    this.success = success;
}
public PjCartItems getData() {
    return data;
}
public void setData(PjCartItems data) {
    this.data = data;
}
@Override
public String toString() {
    return "PjCart{" +
            "data=" + data +
            ", success='" + success + '\'' +
            '}';
}

2)

public class PjCartItems {
private List<PjCartItemsString> items;
public List<PjCartItemsString> getItems() {
    return items;
}
public void setItems(List<PjCartItemsString> items) {
    this.items = items;
}
@Override
public String toString() {
    return "PjCartItems{" +
            "items=" + items +
            '}';
}

3)Последний уровень, где описываются строки для List

public class PjCartItemsString {
private String id,param_id,name,image,count,price,car;
public String getId() {
    return id;
}
public void setId(String id) {
    this.id = id;
}
public String getParam_id() {
    return param_id;
}
public void setParam_id(String param_id) {
    this.param_id = param_id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getImage() {
    return image;
}
public void setImage(String image) {
    this.image = image;
}
public String getCount() {
    return count;
}
public void setCount(String count) {
    this.count = count;
}
public String getPrice() {
    return price;
}
public void setPrice(String price) {
    this.price = price;
}
public String getCar() {
    return car;
}
public void setCar(String car) {
    this.car = car;
}
@Override
public String toString() {
    return "PjCartItemsString{" +
            "id='" + id + '\'' +
            ", param_id='" + param_id + '\'' +
            ", name='" + name + '\'' +
            ", image='" + image + '\'' +
            ", count='" + count + '\'' +
            ", price='" + price + '\'' +
            ", car='" + car + '\'' +
            '}';
}

Выдает com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_ARRAY token, я не могу найти где ошибка, Вроде же подается в List массив из строк)

Answer 1

У вас в json "car": [] - массив, а в классе PjCartItemsString в коде это String.

Вроде же подается в List массив из строк)

Внутри List массив из объектов, а не строк, и внутри этого объекта уже ошибка возникает. В тексте ошибки же явно сказано, что парсер не может десереализовать строку, так как видит массив.

READ ALSO
Servlet, AJAX, Jsp -&gt; как вернуть страницу JSP

Servlet, AJAX, Jsp -> как вернуть страницу JSP

JS получает данные от API FB и отправляет их на сервлет посредством AJAX

377
Повторное использование потока

Повторное использование потока

Есть поток реализованный следующим образом, при создании потока isRun=true, при выполнении определённых действий он зацикливается на sleep(), до того...

248
Изменять начальный цвет

Изменять начальный цвет

Cтолкнулся с новой задачей:

212
Javah -stubs не генерирует ничего

Javah -stubs не генерирует ничего

Пробую JNI, наткнулся на такую статью: ссылка Там автор пишет такое:

241