尝试从JSON反序列化时出现以下错误:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException:
Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 1258
答案 0 :(得分:3)
由于您尚未将源发布到ToggleProcessedImage
(或它本身可能包含的任何对象),我无法真正告诉您为什么您的JSON没有反序列化。 Gson期望一个特定字段的数组,但JSON似乎包含该字段的对象。
我查看了JSON中的第1258行(发生错误的地方)并看到它是:
"MeasuredBox": {
...
}
现在,您还有:
"MeasuredBoxes": [
...
]
在其中一个课程中,您是否可能意外地将measuredBox
字段的类型定义为List<MeasuredBox>
或MeasuredBox[]
而不仅仅是MeasuredBox
?也许你把它与同名的字段measuredBoxes
混淆了。
修改强>
回应你的评论。您发布的MeasuredBoxes
是:
public class MeasuredBoxes {
public Box Region;
public List<Integer> LayerBottoms;
public List<Measurement> Measurements;
public List<Box> MeasuredBox; //<--- this is the source of your error
...
}
那是你的错误。 MeasuredBoxes
类需要Box
属性的MeasuredBox
个对象列表。但是,您提供的JSON只有一个Box
,它直接表示为对象。
要解决此问题,您需要更改JSON以使MeasuredBox
为数组:
"MeasuredBox": [{
...
}]
或更改MeasuredBoxes
类,以使MeasuredBox
字段的类型为Box
,而不是List<Box>
:
public class MeasuredBoxes {
public Box Region;
public List<Integer> LayerBottoms;
public List<Measurement> Measurements;
public Box MeasuredBox; //<--- this is Box now instead of List<Box>
...
}
另外请注意,请使用Java命名约定。变量(包括类字段)和方法应为namedLikeThis
(即驼峰式)和NotLikeThis
,但类应为NamedLikeThis
。
最好保留班级成员private
;使它们public
是例外而不是规则。