java - 如何使用gson将对象转换为数组

标签 java json gson

我有这个 json:

{"datosCliente":{"adeudoAdicional":"","aplicacionMinimaMonedero":0,"canalVentaPoliza":"Call Center","celular":"","clienteId":763483,"codigoError":0,"correo":"","disponibleDisposicion":0,"disponibleGlobal":0,"disposicionMaxima":0,"disposicionMinima":0,"mensajeError":"Operacion exitosa","mensajePoliza":"Poliza Vigente","monedero":82.5,"montoAtrasado":0,"montoDeuda":0,"montoLineaPrestamo":0,"movimientoPermitido":0,"nombre":"MIRIAM NOHEMI  MARTINEZ ESCOBEDO","plazo":0,"polizaColorAdvertencia":"#009933","prestamas":"","promesas":{"acumulado":56.26,"fecha":"30-nov-15","monto":56.26},"prospectoPrestamas":0,"puntos":0,"seguro":0,"vigenciaPoliza":"23 de Junio del 2015 al 23 de Junio del 2016"}}

该 json 对象包含名为 promesas 的属性,该属性应该是对象的 List,但是当它返回一个对象时,结果将作为单个对象返回。我真正想要的是:

"promesas":[{"acumulado":56.26,"fecha":"30-nov-15","monto":56.26}]

这是我的代码:

 @GET
 @Path("/validacionTarjeta/{tarjeta}/{comercioId}/{tipo}")
 @Produces("application/json")
 public DatosCliente validacionTarjeta(@PathParam("tarjeta")String tarjeta,@PathParam("comercioId")int comercioId,@PathParam("tipo")int tipo){
     /*
        -Monedero                   tipo=1
        -Cancelaciones              tipo=2
        -Disposiciones              tipo=3
        -Pagos                      tipo=4
        -Boletos senda              tipo=5
        -Boletos omnibus            tipo=6
        -Tiempo aire y servicios    tipo=7
        -Prestarjeta                tipo=8
        -PrestaMa$                  tipo=9
    */
     DatosCliente datosCliente = null;
     try {
         if(tipo==1){
             conn.open();
             cs=query.SPCON_VALIDATARJETA(conn, tarjeta, comercioId, tipo);
             rs=cs.getResultSet();
             if(rs.next()){
                 datosCliente=new DatosCliente();
                 if(rs.getInt("codigoError")!=0){
                     datosCliente.setMensajeError(rs.getString("mensajeError"));
                     datosCliente.setCodigoError(rs.getInt("codigoError"));
                 }else{
                     datosCliente.setMensajeError(rs.getString("mensajeError"));
                     datosCliente.setCodigoError(rs.getInt("codigoError"));
                     datosCliente.setMontoDeuda(rs.getDouble("montoDeuda"));
                     datosCliente.setClienteId(rs.getInt("clienteId"));
                     datosCliente.setNombre(rs.getString("nombre"));
                     datosCliente.setMonedero(rs.getDouble("monedero"));
                     datosCliente.setProspectoPrestamas(rs.getInt("prospectoPrestamas"));
                     datosCliente.setPuntos(rs.getDouble("puntos"));
                     datosCliente.setAplicacionMinimaMonedero(rs.getDouble("aplicacionMinimaMonedero"));
                     datosCliente.setVigenciaPoliza(rs.getString("vigenciaPoliza"));
                     datosCliente.setMensajePoliza(rs.getString("mensajePoliza"));
                     datosCliente.setCanalVentaPoliza(rs.getString("canalVentaPoliza"));
                     datosCliente.setPolizaColorAdvertencia(rs.getString("polizaColorAdvertencia"));
                     datosCliente.setAdeudoAdicional(rs.getString("adeudoAdicional"));
                 }
             }
         }else if(tipo==2){
             conn.open();
             cs=query.SPCON_VALIDATARJETA(conn, tarjeta, comercioId, tipo);
             rs=cs.getResultSet();
             if(rs.next()){
                 datosCliente=new DatosCliente();
                 if(rs.getInt("codigoError")!=0){
                     datosCliente.setMensajeError(rs.getString("mensajeError"));
                     datosCliente.setCodigoError(rs.getInt("codigoError"));
                 }else{
                     datosCliente.setMensajeError(rs.getString("mensajeError"));
                     datosCliente.setCodigoError(rs.getInt("codigoError"));
                     datosCliente.setClienteId(rs.getInt("clienteId"));
                     datosCliente.setProspectoPrestamas(rs.getInt("prospectoPrestamas"));
                     datosCliente.setVigenciaPoliza(rs.getString("vigenciaPoliza"));
                     datosCliente.setMensajePoliza(rs.getString("mensajePoliza"));
                     datosCliente.setCanalVentaPoliza(rs.getString("canalVentaPoliza"));
                     datosCliente.setPolizaColorAdvertencia(rs.getString("polizaColorAdvertencia"));
                 }
             }
         }else if(tipo==3){
             conn.open();
             cs=query.SPCON_VALIDATARJETA(conn, tarjeta, comercioId, tipo);
             rs=cs.getResultSet();
             if(rs.next()){
                 datosCliente=new DatosCliente();
                 if(rs.getInt("codigoError")!=0){
                     datosCliente.setMensajeError(rs.getString("mensajeError"));
                     datosCliente.setCodigoError(rs.getInt("codigoError"));
                 }else{
                     datosCliente.setMensajeError(rs.getString("mensajeError"));
                     datosCliente.setCodigoError(rs.getInt("codigoError"));
                     datosCliente.setMovimientoPermitido(rs.getInt("movimientoPermitido"));
                     datosCliente.setAdeudoAdicional(rs.getString("adeudoAdicional"));
                     datosCliente.setVigenciaPoliza(rs.getString("vigenciaPoliza"));
                     datosCliente.setMensajePoliza(rs.getString("mensajePoliza"));
                     datosCliente.setCanalVentaPoliza(rs.getString("canalVentaPoliza"));
                     datosCliente.setPolizaColorAdvertencia(rs.getString("polizaColorAdvertencia"));
                     datosCliente.setDisposicionMaxima(rs.getDouble("disposicionMaxima"));
                     datosCliente.setDisposicionMinima(rs.getDouble("disposicionMinima"));
                     datosCliente.setSeguro(rs.getInt("seguro"));
                     datosCliente.setClienteId(rs.getInt("clienteId"));
                     datosCliente.setNombre(rs.getString("nombre"));
                     datosCliente.setMonedero(rs.getDouble("monedero"));
                     datosCliente.setProspectoPrestamas(rs.getInt("prospectoPrestamas"));
                     datosCliente.setCorreo(rs.getString("correo"));
                     datosCliente.setCelular(rs.getString("celular"));
                     datosCliente.setDisponibleGlobal(rs.getDouble("disponibleGlobal"));
                     datosCliente.setDisponibleDisposicion(rs.getDouble("disponibleDisposicion"));
                 }
             }
         }else if(tipo==4){
             conn.open();
             cs=query.SPCON_VALIDATARJETA(conn, tarjeta, comercioId, tipo);
             rs=cs.getResultSet();
             if(rs.next()){
                 datosCliente=new DatosCliente();
                 if(rs.getInt("codigoError")!=0){
                     datosCliente.setMensajeError(rs.getString("mensajeError"));
                     datosCliente.setCodigoError(rs.getInt("codigoError"));
                 }else{
                     datosCliente.setMensajeError(rs.getString("mensajeError"));
                     datosCliente.setCodigoError(rs.getInt("codigoError"));
                     datosCliente.setClienteId(rs.getInt("clienteId"));
                     datosCliente.setNombre(rs.getString("nombre"));
                     datosCliente.setMonedero(rs.getDouble("monedero"));
                     datosCliente.setProspectoPrestamas(rs.getInt("prospectoPrestamas"));
                     datosCliente.setVigenciaPoliza(rs.getString("vigenciaPoliza"));
                     datosCliente.setMensajePoliza(rs.getString("mensajePoliza"));
                     datosCliente.setCanalVentaPoliza(rs.getString("canalVentaPoliza"));
                     datosCliente.setPolizaColorAdvertencia(rs.getString("polizaColorAdvertencia"));
                     datosCliente.setAdeudoAdicional(rs.getString("adeudoAdicional"));
                     datosCliente.setMontoAtrasado(rs.getDouble("montoAtrasado"));
                 }
             }
             if(cs.getMoreResults()){
                 rs=cs.getResultSet();
                 PromesaPago promesaPago=null;
                 List<PromesaPago> lista=new ArrayList<PromesaPago>();
                 while(rs.next()){
                     promesaPago=new PromesaPago();
                     promesaPago.setFecha(rs.getString("fecha"));
                     promesaPago.setMonto(rs.getDouble("monto"));
                     promesaPago.setAcumulado(rs.getDouble("montoacumulado"));
                     lista.add(promesaPago);
                 }
                 datosCliente.setPromesas(lista);
             }
         }else if(tipo==5){
             conn.open();
             cs=query.SPCON_VALIDATARJETA(conn, tarjeta, comercioId, tipo);
             rs=cs.getResultSet();
             if(rs.next()){
                 datosCliente=new DatosCliente();
                 if(rs.getInt("codigoError")!=0){
                     datosCliente.setMensajeError(rs.getString("mensajeError"));
                     datosCliente.setCodigoError(rs.getInt("codigoError"));
                 }else{
                     datosCliente.setMensajeError(rs.getString("mensajeError"));
                     datosCliente.setCodigoError(rs.getInt("codigoError"));
                     datosCliente.setClienteId(rs.getInt("clienteId"));
                     datosCliente.setNombre(rs.getString("nombre"));
                     datosCliente.setMonedero(rs.getDouble("monedero"));
                     datosCliente.setProspectoPrestamas(rs.getInt("prospectoPrestamas"));
                     datosCliente.setCorreo(rs.getString("correo"));
                     datosCliente.setCelular(rs.getString("celular"));
                     datosCliente.setDisponibleGlobal(rs.getDouble("disponibleGlobal"));
                     datosCliente.setMovimientoPermitido(rs.getInt("movimientoPermitido"));
                     datosCliente.setVigenciaPoliza(rs.getString("vigenciaPoliza"));
                     datosCliente.setMensajePoliza(rs.getString("mensajePoliza"));
                     datosCliente.setCanalVentaPoliza(rs.getString("canalVentaPoliza"));
                     datosCliente.setPolizaColorAdvertencia(rs.getString("polizaColorAdvertencia"));
                     datosCliente.setAdeudoAdicional(rs.getString("adeudoAdicional"));
                     datosCliente.setDisposicionMinima(rs.getDouble("disposicionMinima"));
                     datosCliente.setDisposicionMaxima(rs.getDouble("disposicionMaxima"));
                 }
             }
         }else if(tipo==6){
             conn.open();
             cs=query.SPCON_VALIDATARJETA(conn, tarjeta, comercioId, tipo);
             rs=cs.getResultSet();
             if(rs.next()){
                 datosCliente=new DatosCliente();
                 if(rs.getInt("codigoError")!=0){
                     datosCliente.setMensajeError(rs.getString("mensajeError"));
                     datosCliente.setCodigoError(rs.getInt("codigoError"));
                 }else{
                     datosCliente.setMensajeError(rs.getString("mensajeError"));
                     datosCliente.setCodigoError(rs.getInt("codigoError"));
                     datosCliente.setClienteId(rs.getInt("clienteId"));
                     datosCliente.setNombre(rs.getString("nombre"));
                     datosCliente.setMonedero(rs.getDouble("monedero"));
                     datosCliente.setProspectoPrestamas(rs.getInt("prospectoPrestamas"));
                     datosCliente.setCorreo(rs.getString("correo"));
                     datosCliente.setCelular(rs.getString("celular"));
                     datosCliente.setDisponibleGlobal(rs.getDouble("disponibleGlobal"));
                     datosCliente.setMovimientoPermitido(rs.getInt("movimientoPermitido"));
                     datosCliente.setVigenciaPoliza(rs.getString("vigenciaPoliza"));
                     datosCliente.setMensajePoliza(rs.getString("mensajePoliza"));
                     datosCliente.setCanalVentaPoliza(rs.getString("canalVentaPoliza"));
                     datosCliente.setPolizaColorAdvertencia(rs.getString("polizaColorAdvertencia"));
                     datosCliente.setAdeudoAdicional(rs.getString("adeudoAdicional"));
                     datosCliente.setDisposicionMinima(rs.getDouble("disposicionMinima"));
                     datosCliente.setDisposicionMaxima(rs.getDouble("disposicionMaxima"));
                 }
             }
         }else if(tipo==7){
             conn.open();
             cs=query.SPCON_VALIDATARJETA(conn, tarjeta, comercioId, tipo);
             rs=cs.getResultSet();
             if(rs.next()){
                 datosCliente=new DatosCliente();
                 if(rs.getInt("codigoError")!=0){
                     datosCliente.setMensajeError(rs.getString("mensajeError"));
                     datosCliente.setCodigoError(rs.getInt("codigoError"));
                 }else{
                     datosCliente.setMensajeError(rs.getString("mensajeError"));
                     datosCliente.setCodigoError(rs.getInt("codigoError"));
                     datosCliente.setClienteId(rs.getInt("clienteId"));
                     datosCliente.setNombre(rs.getString("nombre"));
                     datosCliente.setProspectoPrestamas(rs.getInt("prospectoPrestamas"));
                     datosCliente.setDisponibleGlobal(rs.getDouble("disponibleGlobal"));
                     datosCliente.setMovimientoPermitido(rs.getInt("movimientoPermitido"));
                     datosCliente.setVigenciaPoliza(rs.getString("vigenciaPoliza"));
                     datosCliente.setMensajePoliza(rs.getString("mensajePoliza"));
                     datosCliente.setCanalVentaPoliza(rs.getString("canalVentaPoliza"));
                     datosCliente.setPolizaColorAdvertencia(rs.getString("polizaColorAdvertencia"));
                     datosCliente.setAdeudoAdicional(rs.getString("adeudoAdicional"));
                     datosCliente.setDisposicionMinima(rs.getDouble("disposicionMinima"));
                 }
             }
         }else if(tipo==8){
             conn.open();
             cs=query.SPCON_VALIDATARJETA(conn, tarjeta, comercioId, tipo);
             rs=cs.getResultSet();
             if(rs.next()){
                 datosCliente=new DatosCliente();
                 if(rs.getInt("codigoError")!=0){
                     datosCliente.setMensajeError(rs.getString("mensajeError"));
                     datosCliente.setCodigoError(rs.getInt("codigoError"));
                 }else{
                     datosCliente.setMensajeError(rs.getString("mensajeError"));
                     datosCliente.setCodigoError(rs.getInt("codigoError"));
                     datosCliente.setClienteId(rs.getInt("clienteId"));
                     datosCliente.setNombre(rs.getString("nombre"));
                     datosCliente.setMonedero(rs.getDouble("monedero"));
                     datosCliente.setMovimientoPermitido(rs.getInt("movimientoPermitido"));
                     datosCliente.setVigenciaPoliza(rs.getString("vigenciaPoliza"));
                     datosCliente.setMensajePoliza(rs.getString("mensajePoliza"));
                     datosCliente.setCanalVentaPoliza(rs.getString("canalVentaPoliza"));
                     datosCliente.setPolizaColorAdvertencia(rs.getString("polizaColorAdvertencia"));
                     datosCliente.setAdeudoAdicional(rs.getString("adeudoAdicional"));
                     datosCliente.setMontoLineaPrestamo(rs.getDouble("montoLinea"));
                     datosCliente.setPlazo(rs.getInt("plazo"));
                 }
             }
         }else if(tipo==9){
             conn.open();
             cs=query.SPCON_VALIDATARJETA(conn, tarjeta, comercioId, tipo);
             rs=cs.getResultSet();
             if(rs.next()){
                 datosCliente=new DatosCliente();
                 if(rs.getInt("codigoError")!=0){
                     datosCliente.setMensajeError(rs.getString("mensajeError"));
                     datosCliente.setCodigoError(rs.getInt("codigoError"));
                 }else{
                     datosCliente.setMensajeError(rs.getString("mensajeError"));
                     datosCliente.setCodigoError(rs.getInt("codigoError"));
                     datosCliente.setClienteId(rs.getInt("clienteId"));
                     datosCliente.setNombre(rs.getString("nombre"));
                     datosCliente.setMonedero(rs.getDouble("monedero"));
                     datosCliente.setMovimientoPermitido(rs.getInt("movimientoPermitido"));
                     datosCliente.setVigenciaPoliza(rs.getString("vigenciaPoliza"));
                     datosCliente.setMensajePoliza(rs.getString("mensajePoliza"));
                     datosCliente.setCanalVentaPoliza(rs.getString("canalVentaPoliza"));
                     datosCliente.setPolizaColorAdvertencia(rs.getString("polizaColorAdvertencia"));
                     datosCliente.setAdeudoAdicional(rs.getString("adeudoAdicional"));
                     datosCliente.setMontoLineaPrestamo(rs.getDouble("montoLinea"));
                     datosCliente.setPlazo(rs.getInt("plazo"));
                     datosCliente.setPrestamas(rs.getString("tarjetaPrestamas"));
                 }
             }
         }else{
             datosCliente=new DatosCliente();
             datosCliente.setMensajeError("Tipo incorrecto");
             datosCliente.setCodigoError(99);
         }
     } catch (SQLException e) {
         e.printStackTrace();
         logger.error(e);
     }finally{
         try {
             if(cs!=null){
                 cs.close();
                 rs.close();
                 conn.close();
             }
        } catch (SQLException e) {
            e.printStackTrace();
            logger.error(e);
        }
     }
     return datosCliente;
 }

这是包含列表的类:

@XmlRootElement
public class DatosCliente {

    private String mensajeError;
    private int codigoError;
    private String nombre;
    private double montoDeuda; 
    private double monedero;
    private double aplicacionMinimaMonedero;
    private String adeudoAdicional;
    private double puntos;
    private int prospectoPrestamas;
    private int clienteId;
    private String mensajePoliza;
    private String polizaColorAdvertencia;
    private String vigenciaPoliza;
    private String canalVentaPoliza;
    private int movimientoPermitido;
    private int seguro;
    private double disponibleGlobal;
    private double disposicionMinima;
    private double disposicionMaxima;
    private double disponibleDisposicion;
    private String celular;
    private String correo;
    private double montoAtrasado;
    private List<PromesaPago> promesas;
    private double montoLineaPrestamo;
    private int plazo;
    private String prestamas;

    public DatosCliente() {
        this.mensajeError="";
        this.codigoError=0;
        this.nombre="";
        this.montoDeuda=0; 
        this.monedero=0;
        this.aplicacionMinimaMonedero=0;
        this.adeudoAdicional="";
        this.puntos=0;
        this.prospectoPrestamas=0;
        this.clienteId=0;
        this.mensajePoliza="";
        this.polizaColorAdvertencia="";
        this.vigenciaPoliza="";
        this.canalVentaPoliza="";
        this.movimientoPermitido=0;
        this.seguro=0;
        this.disponibleGlobal=0;
        this.disposicionMinima=0;
        this.disposicionMaxima=0;
        this.disponibleDisposicion=0;
        this.celular="";
        this.correo="";
        this.montoAtrasado=0;
        this.promesas=new ArrayList<PromesaPago>();
        this.montoLineaPrestamo=0;
        this.plazo=0;
        this.prestamas="";
    }
}

这是类(class):

@XmlRootElement
public class PromesaPago {

    private String fecha;
    private double monto;
    private double acumulado;

    public PromesaPago() {
        this.fecha="";
        this.monto=0;
        this.acumulado=0;
    }
}

每个类都有自己的 getter 和 setter

最佳答案

您可以通过多种方式做到这一点。

第一种方法是这样的:

ArrayList<PromesaPago> result = new ArrayList<>();
    JSONObject object=new JSONObject(json);
                JSONArray dataArray=object.getJSONArray("promesas");
                for(int n = 0; n < dataArray.length(); n++)
                {
                    JSONObject object = dataArray.getJSONObject(n);
                    result.add(gson.fromJson(object.toString(), PromesaPago.class));
                }

第二种更干净的方式是这样的:

ArrayList<PromesaPago> result = new ArrayList<>();
 try {
            JSONObject object =new JSONObject(json);
            result = gson.fromJson(posts.getString("promesas"), new TypeToken<List<PromesaPago>>(){}.getType());
        } catch (JSONException e) {
            e.printStackTrace();
        }

关于java - 如何使用gson将对象转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33946675/

相关文章:

java - Java编译错误

java - 在其他函数中而不是 OnCreate() 方法中初始化按钮

java - 线程之间共享数据不正确

json - 解压缩 Gzip JSON 响应

java - 使用 Gson 解析嵌套数组的 Json

java - WebSphere 自定义密码加密

php - curl JSON 时 POST 为空

python - 在 Python 中修改 JSON 键值

java - 如何反序列化包含相同键名但使用不同类型的 JSON 文件(使用 Google JSON)?

java - JSON解析为多个POJO集合