This question already has answers here:
Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 35
                                
                                    (2个答案)
                                
                        
                                4年前关闭。
            
                    
尝试从JSON反序列化时出现以下错误:

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

最佳答案

由于您尚未将源发布到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是例外,而不是规则。

10-08 13:25