Разбор JSON с вложенными массивами - PullRequest
0 голосов
/ 26 мая 2018

Так что я попытался, кстати, в своем последнем вопросе, но у меня были только проблемы и больше проблем с ним.Я пытаюсь разобрать это.

[
   {

   },
   {
      "Cliente0":[
         {
            "codrefcli":"1541121"
         },
         {
            "razonsocial":"Perico de los palotes"
         },
         {
            "cif":"45417265"
         },
         {
            "num":"964491837"
         },
         {
            "correo":"perico@yahoo.com"
         },
         {
            "direccion":"calle maria la vieja"
         },
         {
            "metodopago":"T"
         },
         {
            "observaciones":"que pesado"
         }
      ]
   },
   {
      "Empleado0":[
         {
            "codempleado":"1"
         },
         {
            "nombre":"Carlos"
         },
         {
            "apellidos":"Basilio"
         },
         {
            "dni":"15421451H"
         },
         {
            "direccion":"Calle el rio"
         },
         {
            "fechaalta":"2018-05-17"
         },
         {
            "copiacontrato":"aaa"
         },
         {
            "numcuenta":"884723877"
         }
      ]
   },
   {

   },
   {
      "PedidoCliente0":[
         {
            "numped":"454524"
         },
         {
            "fechapedido":"2018-05-09"
         },
         {
            "formapago":"Efectivo"
         },
         {
            "enviadoa":"Perico de los palotes"
         },
         {
            "codcliente":"1541121"
         },
         {
            "cpp":"5132413"
         }
      ]
   },
   {
      "PedidoProveedor0":[
         {
            "numped":"7455112"
         },
         {
            "fechapedido":"2018-05-01"
         },
         {
            "formapago":"Efectivo"
         },
         {
            "enviadoa":"Calle el marino"
         },
         {
            "codcliente":"10"
         },
         {
            "cpp":"4555424"
         }
      ]
   },
   {
      "Producto0":[
         {
            "crf":"4555424"
         },
         {
            "name":"Limpiador"
         },
         {
            "desc":"Producto de importacion italiano"
         },
         {
            "pve":"8.44"
         },
         {
            "pvp":"14.99"
         },
         {
            "cdp":"10"
         },
         {
            "familia":"Limpieza"
         },
         {
            "existencias":"10"
         }
      ],
      "Producto1":[
         {
            "crf":"5132413"
         },
         {
            "name":"Colador"
         },
         {
            "desc":"Colador de acero"
         },
         {
            "pve":"15"
         },
         {
            "pvp":"18"
         },
         {
            "cdp":"10"
         },
         {
            "familia":"Cocina"
         },
         {
            "existencias":"100"
         }
      ]
   },
   {

   },
   {
      "Proveedor0":[
         {
            "crf":"10"
         },
         {
            "razonsocial":"pene"
         },
         {
            "cif":"10"
         },
         {
            "num":"10"
         },
         {
            "correo":"10"
         },
         {
            "direccion":"10"
         },
         {
            "metodopago":"1"
         },
         {
            "observaciones":"10"
         }
      ],
      "Proveedor1":[
         {
            "crf":"5421452"
         },
         {
            "razonsocial":"Falete"
         },
         {
            "cif":"45411"
         },
         {
            "num":"42314"
         },
         {
            "correo":"falete@gmail.com"
         },
         {
            "direccion":"tu casa"
         },
         {
            "metodopago":"T"
         },
         {
            "observaciones":"Es muy pesado"
         }
      ]
   }
]

Я получаю это JSON Generationg, получая данные из моей базы данных, получая их с помощью этого кода:

    import java.io.FileWriter;
import java.io.IOException;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

public class getdata extends dbconnect{

    public void getData() throws IOException {
        int i = 0;

        JSONArray listt = new JSONArray();

        JSONObject jobj = new JSONObject();
        JSONObject jobjt1 = new JSONObject();
        JSONObject jobjt2 = new JSONObject();
        JSONObject jobjt3 = new JSONObject();
        JSONObject jobjt4 = new JSONObject();
        JSONObject jobjt5 = new JSONObject();
        JSONObject jobjt6 = new JSONObject();
        JSONObject jobjt7 = new JSONObject();
        JSONObject jobjt8 = new JSONObject();
        JSONObject jobjt9 = new JSONObject();



        try {
            //Albaran
            String query1 = "select * from Albaran";
            rs = st.executeQuery(query1);
            i=0;
            while(rs.next()) {
                JSONArray list1 = new JSONArray();
                JSONObject jobja = new JSONObject();
                JSONObject jobjb = new JSONObject();
                JSONObject jobjc = new JSONObject();
                JSONObject jobjd = new JSONObject();
                JSONObject jobje = new JSONObject();
                JSONObject jobjf = new JSONObject();
                JSONObject jobjg = new JSONObject();
                JSONObject jobjh = new JSONObject();

                String a1= rs.getString("CodAlbaran");
                String a2= rs.getString("CodRefCli");
                String a3= rs.getString("CodRefPro");
                String a4= rs.getString("CIFPropio");
                String a5= rs.getString("Dir.Archivo");

                jobja.put("codalbaran", a1);
                jobjb.put("codRefCli", a2);
                jobjc.put("codrefpro",a3 );
                jobjd.put("cifpropio", a4);
                jobje.put("directorio", a5);                
                 list1.add(jobja);
                 list1.add(jobjb);
                 list1.add(jobjc);
                 list1.add(jobjd);
                 list1.add(jobje);

                 jobjt1.put("Albaran"+i++, list1);

            }
            listt.add(jobjt1);
            //Clientes
            String query2 = "select * from Clientes";
            rs = st.executeQuery(query2);
            i=0;
            while(rs.next()) {
                JSONArray list2 = new JSONArray();
                JSONObject jobja = new JSONObject();
                JSONObject jobjb = new JSONObject();
                JSONObject jobjc = new JSONObject();
                JSONObject jobjd = new JSONObject();
                JSONObject jobje = new JSONObject();
                JSONObject jobjf = new JSONObject();
                JSONObject jobjg = new JSONObject();
                JSONObject jobjh = new JSONObject();

                String b1 = rs.getString("CodRefCli");
                String b2 = rs.getString("RazonSocial");
                String b3 = rs.getString("CIF");
                String b4 = rs.getString("Num");
                String b5 = rs.getString("Correo");
                String b6 = rs.getString("Direccion");
                String b7 = rs.getString("MetodoPago");
                String b8 = rs.getString("Observaciones");

                 jobja.put("codrefcli", b1);
                 jobjb.put("razonsocial", b2);
                 jobjc.put("cif", b3);
                 jobjd.put("num", b4);
                 jobje.put("correo", b5);
                 jobjf.put("direccion", b6);
                 jobjg.put("metodopago", b7);
                 jobjh.put("observaciones", b8);
                 list2.add(jobja);
                 list2.add(jobjb);
                 list2.add(jobjc);
                 list2.add(jobjd);
                 list2.add(jobje);
                 list2.add(jobjf);
                 list2.add(jobjg);
                 list2.add(jobjh);

                 jobjt2.put("Cliente"+i++, list2);

            }
            listt.add(jobjt2);
            //Empleados
            String query3 = "select * from Empleados";
            rs = st.executeQuery(query3);
            i=0;
            while(rs.next()) {
                JSONArray list3 = new JSONArray();
                JSONObject jobja = new JSONObject();
                JSONObject jobjb = new JSONObject();
                JSONObject jobjc = new JSONObject();
                JSONObject jobjd = new JSONObject();
                JSONObject jobje = new JSONObject();
                JSONObject jobjf = new JSONObject();
                JSONObject jobjg = new JSONObject();
                JSONObject jobjh = new JSONObject();

                String c1 = rs.getString("Cod.Empleado");
                String c2 = rs.getString("Nombre");
                String c3 = rs.getString("Apellidos");
                String c4 = rs.getString("DNI");
                String c5 = rs.getString("Direccion");
                String c6 = rs.getString("FechaAlta");
                String c7 = rs.getString("CopiaContrato");
                String c8 = rs.getString("NCuenta");

                 jobja.put("codempleado", c1);
                 jobjb.put("nombre", c2);
                 jobjc.put("apellidos", c3);
                 jobjd.put("dni", c4);
                 jobje.put("direccion", c5);
                 jobjf.put("fechaalta", c6);
                 jobjg.put("copiacontrato", c7);
                 jobjh.put("numcuenta", c8);
                 list3.add(jobja);
                 list3.add(jobjb);
                 list3.add(jobjc);
                 list3.add(jobjd);
                 list3.add(jobje);
                 list3.add(jobjf);
                 list3.add(jobjg);
                 list3.add(jobjh);

                 jobjt3.put("Empleado"+i++, list3);

            }
            listt.add(jobjt3);
            //Existencias
            String query4 = "select * from Existencias";
            rs = st.executeQuery(query4);
            i=0;
            while(rs.next()) {
                JSONArray list4 = new JSONArray();
                JSONObject jobja = new JSONObject();
                JSONObject jobjb = new JSONObject();
                JSONObject jobjc = new JSONObject();
                JSONObject jobjd = new JSONObject();
                JSONObject jobje = new JSONObject();
                JSONObject jobjf = new JSONObject();
                JSONObject jobjg = new JSONObject();
                JSONObject jobjh = new JSONObject();

                String d1 = rs.getString("Cod.RefExistencia");
                String d2 = rs.getString("Cod.RefPro");
                String d3 = rs.getString("Cantidad");
                String d4 = rs.getString("Sitio");
                String d5 = rs.getString("Proposito");

                 jobja.put("codrefexistencia", d1);
                 jobjb.put("codrefproducto", d2);
                 jobjc.put("cantidad", d3);
                 jobjd.put("sitio", d4);
                 jobje.put("proposito", d5);
                 list4.add(jobja);
                 list4.add(jobjb);
                 list4.add(jobjc);
                 list4.add(jobjd);
                 list4.add(jobje);

                 jobjt4.put("Existencia"+i++, list4);

            }
            listt.add(jobjt4);
            //PedidosClientes
            String query5 = "select * from PedidosC";
            rs = st.executeQuery(query5);
            i=0;
            while(rs.next()) {
                JSONArray list5 = new JSONArray();
                JSONObject jobja = new JSONObject();
                JSONObject jobjb = new JSONObject();
                JSONObject jobjc = new JSONObject();
                JSONObject jobjd = new JSONObject();
                JSONObject jobje = new JSONObject();
                JSONObject jobjf = new JSONObject();
                JSONObject jobjg = new JSONObject();
                JSONObject jobjh = new JSONObject();

                String e1= rs.getString("NumPed");
                String e2= rs.getString("FechaPedido");
                String e3= rs.getString("FormadePago");
                String e4 = rs.getString("EnviadoA");
                String e5 = rs.getString("CodCliente");
                String e6 = rs.getString("CPP");

                 jobja.put("numped", e1);
                 jobjb.put("fechapedido", e2);
                 jobjc.put("formapago", e3);
                 jobjd.put("enviadoa", e4);
                 jobje.put("codcliente", e5);
                 jobjf.put("cpp", e6);
                 list5.add(jobja);
                 list5.add(jobjb);
                 list5.add(jobjc);
                 list5.add(jobjd);
                 list5.add(jobje);
                 list5.add(jobjf);

                 jobjt5.put("PedidoCliente"+i++, list5);

            }
            listt.add(jobjt5);
            //PedidosProveedores
            String query6 = "select * from PedidosP";
            rs = st.executeQuery(query6);
            i=0;
            while(rs.next()) {
                JSONArray list6 = new JSONArray();
                JSONObject jobja = new JSONObject();
                JSONObject jobjb = new JSONObject();
                JSONObject jobjc = new JSONObject();
                JSONObject jobjd = new JSONObject();
                JSONObject jobje = new JSONObject();
                JSONObject jobjf = new JSONObject();
                JSONObject jobjg = new JSONObject();
                JSONObject jobjh = new JSONObject();

                String f1= rs.getString("NumPed");
                String f2= rs.getString("FechaPedido");
                String f3 = rs.getString("FormadePago");
                String f4 = rs.getString("EnviadoA");
                String f5 = rs.getString("CodProv");
                String f6 = rs.getString("CPP");

                 jobja.put("numped", f1);
                 jobjb.put("fechapedido", f2);
                 jobjc.put("formapago", f3);
                 jobjd.put("enviadoa", f4);
                 jobje.put("codcliente", f5);
                 jobjf.put("cpp", f6);
                 list6.add(jobja);
                 list6.add(jobjb);
                 list6.add(jobjc);
                 list6.add(jobjd);
                 list6.add(jobje);
                 list6.add(jobjf);

                 jobjt6.put("PedidoProveedor"+i++, list6);

            }
            listt.add(jobjt6);
            //Productos
            String query7 = "select * from Productos";
            rs = st.executeQuery(query7);
            i=0;
            while(rs.next()) {
                JSONArray list7 = new JSONArray();
                JSONObject jobja = new JSONObject();
                JSONObject jobjb = new JSONObject();
                JSONObject jobjc = new JSONObject();
                JSONObject jobjd = new JSONObject();
                JSONObject jobje = new JSONObject();
                JSONObject jobjf = new JSONObject();
                JSONObject jobjg = new JSONObject();
                JSONObject jobjh = new JSONObject();

                String g1= rs.getString("Cod.RefPro");
                String g2= rs.getString("Nombre");
                String g3 = rs.getString("Descripcion");
                String g4 = rs.getString("PrecioNeto");
                String g5 = rs.getString("pvp");
                String g6 = rs.getString("CodRefProv");
                String g7 = rs.getString("Familia");
                String g8 = rs.getString("Existencias");

                 jobja.put("crf", g1);
                 jobjb.put("name", g2);
                 jobjc.put("desc", g3);
                 jobjd.put("pve", g4);
                 jobje.put("pvp", g5);
                 jobjf.put("cdp", g6);
                 jobjg.put("familia", g7);
                 jobjh.put("existencias", g8);
                 list7.add(jobja);
                 list7.add(jobjb);
                 list7.add(jobjc);
                 list7.add(jobjd);
                 list7.add(jobje);
                 list7.add(jobjf);
                 list7.add(jobjg);
                 list7.add(jobjh);

                 jobjt7.put("Producto"+i++, list7);


            }
            listt.add(jobjt7);
            //PropiaEmpresa
            String query8 = "select * from PropiaEmpresa";
            rs = st.executeQuery(query8);
            i=0;
            while(rs.next()) {
                JSONArray list8 = new JSONArray();
                JSONObject jobja = new JSONObject();
                JSONObject jobjb = new JSONObject();
                JSONObject jobjc = new JSONObject();
                JSONObject jobjd = new JSONObject();
                JSONObject jobje = new JSONObject();
                JSONObject jobjf = new JSONObject();
                JSONObject jobjg = new JSONObject();
                JSONObject jobjh = new JSONObject();

                String p1= rs.getString("CIF");
                String p2= rs.getString("RazonSocial");
                String p3 = rs.getString("Telefono");
                String p4 = rs.getString("Correo");
                String p5 = rs.getString("Direccion");
                String p6 = rs.getString("NCuenta");

                 jobja.put("cif", p1);
                 jobjb.put("razonsocial", p2);
                 jobjc.put("telef", p3);
                 jobjd.put("correo", p4);
                 jobje.put("direccion", p5);
                 jobjf.put("ncuenta", p6);
                 list8.add(jobja);
                 list8.add(jobjb);
                 list8.add(jobjc);
                 list8.add(jobjd);
                 list8.add(jobje);
                 list8.add(jobjf);

                 jobjt8.put("PropiaEmpresa", list8);

            }
            listt.add(jobjt8);
            //Proveedor
            String query9 = "select * from Proveedor";
            rs = st.executeQuery(query9);
            i=0;
            while(rs.next()) {
                JSONArray list9 = new JSONArray();
                JSONObject jobja = new JSONObject();
                JSONObject jobjb = new JSONObject();
                JSONObject jobjc = new JSONObject();
                JSONObject jobjd = new JSONObject();
                JSONObject jobje = new JSONObject();
                JSONObject jobjf = new JSONObject();
                JSONObject jobjg = new JSONObject();
                JSONObject jobjh = new JSONObject();

                String h1= rs.getString("Cod.Referencia");
                String h2= rs.getString("RazonSocial");
                String h3 = rs.getString("CIF");
                String h4 = rs.getString("Numero");
                String h5 = rs.getString("Correo");
                String h6 = rs.getString("Direccion");
                String h7 = rs.getString("MetodoPago");
                String h8 = rs.getString("Observaciones");

                 jobja.put("crf", h1);
                 jobjb.put("razonsocial", h2);
                 jobjc.put("cif", h3);
                 jobjd.put("num", h4);
                 jobje.put("correo", h5);
                 jobjf.put("direccion", h6);
                 jobjg.put("metodopago", h7);
                 jobjh.put("observaciones", h8);
                 list9.add(jobja);
                 list9.add(jobjb);
                 list9.add(jobjc);
                 list9.add(jobjd);
                 list9.add(jobje);
                 list9.add(jobjf);
                 list9.add(jobjg);
                 list9.add(jobjh);

                 jobjt9.put("Proveedor"+i++, list9);

            }
            listt.add(jobjt9);
            routes router = new routes();
            String ruta = router.getruta();

            try (FileWriter file = new FileWriter(ruta+"data.json")) {
                file.write(listt.toJSONString());
                file.flush();
            }
        }catch(Exception ex) {
            System.out.println("Error: "+ex);
        }
    }

}

Я пытаюсь почти прочитать файл сэтот код и разбор, но я не понимаю.

    import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.*;
import org.json.*;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class parse {
routes router = new routes();
String ruta = router.getruta();
    public parse() {
        // TODO Auto-generated constructor stub
    }

    public void parseproductos() {
        JSONParser parser = new JSONParser();
        try {final Scanner sc = new Scanner( new File("N:\\data.json"), "UTF-8" )) {
            final String fileContents = sc.useDelimiter("\\A").next();
            parser.parse(fileContents);
//as ccjmne sugested

        }
        catch (FileNotFoundException e) { e.printStackTrace();}
        catch (IOException e) { e.printStackTrace();}
        catch (ParseException e) { e.printStackTrace();}
        catch (Exception e) { e.printStackTrace();}
        } 
    }

Я пробовал, и я получаю только ошибки.И вместо этого я получаю ошибки разрешений на чтение файла или других.Как я могу улучшить код и разбор?Это для школьного проекта.

Обновление

Спасибо ccjmne за предложенные изменения, сделано и ошибки исправлены.Теперь моя проблема возвращается к основной, я не знаю, как читать вложенные массивы json и помещать их в массив java.

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Ну, это потому, что вы пытаетесь не анализировать содержимое вашего файла, а результат new FileReader(...).toString(), который делает что-то совершенно другое.

Вам придется фактически прочитать содержимое впервое место:)

Например:

//                                              try and specify the charset if possible
//                                                             v     v
try(final Scanner sc = new Scanner( new File("N:\\data.json"), "UTF-8" )) {
    final String fileContents = sc.useDelimiter("\\A").next();
    parser.parse(fileContents);
    // ...
}
0 голосов
/ 26 мая 2018

Вызов toString() для объекта FileReader даст вам что-то вроде этого: java.io.FileReader@2345345, и вы попытаетесь проанализировать эту строку, поэтому в сообщении об ошибке говорится, что у вас есть неожиданный символ 'j' в позиции 0Попробуйте сначала прочитать этот файл JSON, а затем проанализировать.

...