json
假设json内容如下:
{"goods":[{"goodsName":"name-0","goodsPrices":0},{"goodsName":"name-1","goodsPrices":1},{"goodsName":"name-2","goodsPrices":2}]}
bean定义
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Bean {
private Goods goods;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public static class Goods {
private String goodsName;
private Integer goodsPrices;
}
}
测试代码
@Test
public void test() {
Gson gson = new Gson();
String json = "{\"goods\":[{\"goodsName\":\"name-0\",\"goodsPrices\":0},{\"goodsName\":\"name-1\",\"goodsPrices\":1},{\"goodsName\":\"name-2\",\"goodsPrices\":2}]}";
System.out.println(json);
// 1. Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 11 path $.goods
// Bean bean = gson.fromJson(json, Bean.class);
// System.out.println(bean);
// 2. Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
// Bean[] beans = gson.fromJson(json, Bean[].class);
// System.out.println(beans);
}
Expected BEGIN_OBJECT but was BEGIN_ARRAY
先 解注释 第1点,注释掉 第2点,抛出如下异常:
Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 11 path $.goods。
字面含义:期望类型是BEGIN_OBJECT但实际是BEGIN_ARRAY。
这里主要是明白是谁期望?? 期望的主语的 程序员,"实际"是指 要被反序列化的json串。
gson比较好的还指出了反序列化时出问题的地点: 表示json串的开始位置)。
结论
该json串中goods是个数组,但是java bean中,goods是个对象,因此提示:Expected BEGIN_OBJECT but was BEGIN_ARRAY。
Expected BEGIN_ARRAY but was BEGIN_OBJECT
注释掉 第1点,解注释 第2点。抛出如下异常:
Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
java代码,期望是Bean[].class,但json串中实际是个对象。并且给出了json串出问题的位置:$(起始位置)