使用GSON解析JSON返回null

时间:2014-03-28 18:54:16

标签: java android json gson

这是我的Json:

[
{
"canaldsc":"PHARMA",
"cadenadsc":null,
"formatodsc":"DEL AHORRO",
"estadodsc":null,
"ciudaddsc":"VALLE DE MEXICO",
"regiondsc":"CENTRO SUR",
"proyectotiendaid":null,
"proyectoid":"79",
"planid":"54",
"proyectodsc":"Concurso",
"vigencia":"0000-00-00",
"activo":"1",
"usuarioproyectotiendaid":"65280",
"proyecto":null,
"fechainicio":"2014-03-24",
"lunes":"7",
"martes":"7",
"miercoles":"7",
"jueves":"7",
"viernes":"7",
"sabado":"7",
"domingo":"7"
},
{
"canaldsc":"PHARMA",
"cadenadsc":null,
"formatodsc":"DEL AHORRO",
"estadodsc":null,
"ciudaddsc":"VALLE DE MEXICO",
"regiondsc":"CENTRO SUR",
"proyectotiendaid":null,
"proyectoid":"79",
"planid":"54",
"proyectodsc":"Concurso",
"vigencia":"0000-00-00",
"activo":"1",
"usuarioproyectotiendaid":"65284",
"proyecto":null,
"fechainicio":"2014-03-24",
"lunes":"7",
"martes":"7",
"miercoles":"7",
"jueves":"7",
"viernes":"7",
"sabado":"7",
"domingo":"7"
}
]

实际上,有两个以上的对象,但我将其剪切为简化

我的模特课程:

public class PdvResult {
public PdvResult() {
}

public String canaldsc;
public String cadenadsc;
public String formatodsc;
public String estadodsc;
public String ciudaddsc;
public String regiondsc;
public String proyectotiendaid;
public String proyectoid;
public String planid;
public String proyectodsc;
public String vigencia;
public String activo;
public String usuarioproyectotiendaid;
public String proyecto;
public String fechainicio;
public String lunes;
public String martes;
public String miercoles;
public String jueves;
public String viernes;
public String sabado;
public String domingo;
}

它应该在名称中对应,以便映射可以发生。

在我的Java中,我使用

List<PdvResult> pdvs = (List<PdvResult>)gson.fromJson(reader, new TypeToken<PdvResult>() {}.getType());

但是pdvs返回null。

我的代码有什么问题????

2 个答案:

答案 0 :(得分:1)

更改解析JSON的行,使用:

List<PdvResult> pdvs = gson.fromJson(reader, new TypeToken<List<PdvResult>>() {}.getType());

您正在使用TypeToken<PdvResult>,并且必须使用TypeToken<List<PdvResult>>,否则您将尝试将JSON解析为PdvResult对象,而实际上您有一个数组PdvResult个对象!

答案 1 :(得分:0)

检查返回的JSON对象类型的最佳方法解释如下:

  • 开始表单Object

    Object result= gson.fromJson(reader,Object.class);
    System.out.println(result.getClass().getName());
    
  • 它将返回java.lang.ArrayList

  • 执行ArrayList

    的相同操作
    System.out.println(((ArrayList)result).size());
    System.out.println(((ArrayList)result).get(0).getClass().getName());
    
  • 现在它将打印存储在ArrayList

  • 中的类名
  • 重复相同的操作直到叶节点
  • 最后通过检查对象和类类型
  • 按预期形成结果JSON对象