【问题标题】:Why does GSON give me an error when parsing an array of array of objects? [duplicate]为什么 GSON 在解析对象数组时会给我一个错误? [复制]
【发布时间】:2017-10-14 01:44:14
【问题描述】:

JSON:

[{"DataContainer": {
      "ShoppingDetails": [
        [
          {
            "Value": "3",
            "Name": "Price"
          },
          {
            "Value": "XAV-13-9LO",
            "Name": "Item Code"
          }
        ],
        [
          {
            "Value": "9",
            "Name": "Price"
          },
          {
            "Value": "WEB-13-9XH",
            "Name": "Item Code"
          }
        ]
      ]
    }
 }]

我已经有一个类DataContainer:

public class DataContainer extends WebResp{
    @SerializedName("ShoppingDetails")
    private ShoppingDetails[] shoppingDetails;

    public ShoppingDetails[] getShoppingDetails() {
        return shoppingDetails;
    }

    public void setShoppingDetails(ShoppingDetails[] shoppingDetails) {
        this.shoppingDetails= shoppingDetails;
    }
}

和类 ShoppingDetails:

public class ShoppingDetails{
    private Field[] field;

    public Field[] getField() {
        return field;
    }

    public void setField(Field[] field) {
        this.field= field;
   }
}

但不幸的是,我最终得到了 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 预期 BEGIN_OBJECT 但在第 61 行第 10 列路径 $[0].DataContainer.ShoppingDetails[0]

处为 BEGIN_ARRAY

有人能指出我使用 GSON 将此 JSON 映射到 Java 对象的正确方向吗?

【问题讨论】:

  • 您将 shoppingDetails 声明为一个数组,但它是 JSON 中的一个数组。
  • “为什么 GSON 在解析 array of array 对象时会给我一个错误?” 你的标题说明了一切。 “数组数组”。 shoppingDetails 必须是Field[][],即Field 的数组。然后Field 应该是一个有两个String 字段的类,分别用@SerializedName("Value")@SerializedName("Name") 注释。
  • 啊!非常感谢你们俩。这真是一个天真的错误。有没有办法接受评论作为答案?
  • @Andreas 应该将评论作为答案发布,然后可以接受

标签: java arrays json object gson


【解决方案1】:
  • 添加DataBean

  • 使用Gson解析

1.DataBean

public class DataBean {

private DataContainerBean DataContainer;

public DataContainerBean getDataContainer() {
    return DataContainer;
}

public void setDataContainer(DataContainerBean DataContainer) {
    this.DataContainer = DataContainer;
}

public static class DataContainerBean {
    /**
     * Value : 3
     * Name : Price
     */

    private List<List<ShoppingDetailsBean>> ShoppingDetails;

    public List<List<ShoppingDetailsBean>> getShoppingDetails() {
        return ShoppingDetails;
    }

    public void setShoppingDetails(List<List<ShoppingDetailsBean>> ShoppingDetails) {
        this.ShoppingDetails = ShoppingDetails;
    }

    public static class ShoppingDetailsBean {
        private String Value;
        private String Name;

        public String getValue() {
            return Value;
        }

        public void setValue(String Value) {
            this.Value = Value;
        }

        public String getName() {
            return Name;
        }

        public void setName(String Name) {
            this.Name = Name;
        }
    }
}
}

2.使用Gsontp解析

Gson gson = new Gson();
try {
    JSONArray jsonArray = new JSONArray(response);
    for (int i = 0; i < jsonArray.length(); i++) {
        DataBean dataBean = gson.fromJson(jsonArray.getJSONObject(i).toString(),DataBean.class);
    }
} catch (JSONException e) {
    e.printStackTrace();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 2015-06-12
    相关资源
    最近更新 更多