com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期BEGIN_ARRAY但在第1行第1258行是BEGIN_OBJECT

时间:2015-05-19 23:45:04

标签: java gson

尝试从JSON反序列化时出现以下错误:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException:
Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 1258  

1 个答案:

答案 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是例外而不是规则。