当前位置: 首页 > 知识库问答 >
问题:

带有列表对象的Gson对象复合体(从json到复杂对象)

黄凌龙
2023-03-14

我得到和错误当我执行

VehiculoCombustiblesResponseDTO respuesta= new Gson().fromJson(response.toString(), VehiculoCombustiblesResponseDTO.class);

错误是:

未处理的异常:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期BEGIN_OBJECT但BEGIN_ARRAY在第1行第52列路径$. f

这是 json 响应

{"a":5,"b":50,"c":23,"d":"12349","e":2,"f":[{"a":2,"b":"Premium"},{"a":1,"b":"Magna"}]}

我有这个班级

public class VehiculoCombustiblesResponseDTO {
    private int a;
    private  int b;

    /**
     * VehiculoId
     * @return
     */
    public int getA() {
        return a;
    }
    /**
     * VehiculoId
     * @return
     */
    public void setA(int a) {
        this.a = a;
    }

    /**
     * CapacidadCombustible
     * @return
     */
    public int getB() {
        return b;
    }

    /**
     * CapacidadCombustible
     * @return
     */
    public void setB(int b) {
        this.b = b;
    }

    /**
     * KilometrajeInicial
     * @return
     */
    public int getC() {
        return c;
    }
    /**
     * KilometrajeInicial
     * @return
     */
    public void setC(int c) {
        this.c = c;
    }

    /**
     * NumeroEconomico
     * @return
     */
    public String getD() {
        return d;
    }
    /**
     * NumeroEconomico
     * @return
     */
    public void setD(String d) {
        this.d = d;
    }

    /**
     * TipoCombustibleId
     * @return
     */
    public int getE() {
        return e;
    }
    /**
     * TipoCombustibleId
     * @return
     */
    public void setE(int e) {
        this.e = e;
    }
    /**
     * TiposCombustible (Listado)
     * @return
     */
    public TiposCombustibleResponseDTO getF() {
        return f;
    }
    /**
     * TiposCombustible (Listado)
     * @return
     */
    public void setF(TiposCombustibleResponseDTO f) {
        this.f = f;
    }

    private  int c;
    private  String d;
    private int e;
    private TiposCombustibleResponseDTO f;
}

和这个其他

public class TiposCombustibleResponseDTO {

    /**
     * obtiene CombustibleId del servidor
     * @return
     */
    public int getA() {
        return a;
    }

    /**
     * Establece CombustibleId
     * @param a
     */
    public void setA(int a) {
        this.a = a;
    }

    /**
     * obtiene Descripcion del servidor
     * @return
     */
    public String getB() {
        return b;
    }

    /**
     * Estaclece Descripcion del servidor
     * @param b
     */
    public void setB(String b) {
        this.b = b;
    }

    private int a;
    private String b;

}

共有1个答案

全心思
2023-03-14

你对Gson说:给我这个JSON的对象,Gson找到了一个对象,但是JSON响应中的f是一个数组,但是在你的类中这个字段是一个对象,所以这是不兼容的。

JSON对象和数组有显着区别:

这是JSON对象:

{ "firstName":"John", "lastName":"Doe" }

这是JSON数组:

[
    { "firstName":"John", "lastName":"Doe" }, 
    { "firstName":"Anna", "lastName":"Smith" }, 
    { "firstName":"Peter","lastName":"Jones" }
]

请注意以下括号:[]

解决方案:

f字段更改为数组:

private TiposCombustibleResponseDTO[] f;
 类似资料:
  • 这个json对象有时可能非常非常大,我想用GSON解析它,但我不太明白我的java对象的格式应该如何解析它们。 真正的肉在键中,第二个键是JSONArray。每个索引包含一个对象,每个对象可以包含一个键,该键也是一个json数组,在某些情况下可以包含json数组。 我有所有这些的模型,有不同的解析范式,但没有GSON的模型。由于内存限制,我现在需要使用GSON

  • 问题内容: 我有以下情况: 在我的Query.xml中,我以这种方式编写了插入内容: 阅读mybatis结果地图指南后,我尝试在mybatis-config.xml文件中添加以下行: 但我一直收到以下错误: 谁能告诉我该如何设置? 问题答案: 中的属性需要引用结果映射的名称,而不是Java类型: 但是,如果作为单独的表存储在数据库中,则不支持嵌套插入。您将需要在Java中调用两个插入。Result

  • 很抱歉标题太长,但我的问题如下; 我有这些课程; 和 和 如果只有断言它拥有的列表,我会使用以下自定义匹配器;

  • 问题内容: 我有几个Javascript原型。最初,实例将仅填写ID,并带有一些其他数据的通用占位符信息。然后,我使用ID和对象类型(使用jQuery的AJAX函数)向服务器发送一条消息,然后服务器返回一个JSON对象,其中包含所有缺少的信息(但没有ID)。返回的对象中的变量与现有对象中的变量名称完全相同。 将其转移到现有的空对象中最简单的方法是什么?我想出了几种选择 将对象设置为等于返回的对象,

  • 我试图从一个相当复杂的Java对象生成一个CSV文件。该对象是一个会话,具有一些属性,字符串和消息的列表,这些字符串和消息又具有一些属性,还有一个注释的列表,这些注释具有一些属性。 session类如下所示; 消息类如下所示; 事实上,开始认为(单一的)CSV可能不是解决这个问题的最佳方法。