ciao!
ho fatto qualche modifica per mettere i dati in forma "tabellare" da dare in pasto ad apache poi e creare il file excel.
ho usato un ArrayList<ArrayList<String>>:
poi prendo la lista e la passo ad un'altra classe cha la elabora e crea l'excel.codice:public class TabellaJson { private JsonFactory factory; private JsonParser parser; private ArrayList<ArrayList<String>> list; public TabellaJson(String json) throws IOException { factory = new JsonFactory(); parser = factory.createParser(new File(json)); list = new ArrayList<>(); } public ArrayList<ArrayList<String>> getList() { return list; } private void setList(ArrayList<ArrayList<String>> list) { this.list = list; } public void close() throws IOException { parser.close(); } public void parse() throws IOException { JsonToken token; while ((token = parser.nextToken()) != null) { if (token == JsonToken.START_ARRAY) { parseMainArray(); } else { throw new IllegalStateException("Il token non è un array come previsto!"); } } setList(list); } private void parseMainArray() throws IOException { JsonToken token; while ((token = parser.nextToken()) != JsonToken.END_ARRAY) { if (token == JsonToken.START_OBJECT) { list.add(parseMainObject()); } else { throw new IllegalStateException("Il token non è un oggetto come previsto!"); } } } private ArrayList<String> parseMainObject() throws IOException { ArrayList<String> tmp = new ArrayList<>(); JsonToken token; while ((token = parser.nextToken()) != JsonToken.END_OBJECT) { System.out.println(token); token = parser.nextToken(); switch (token) { case VALUE_STRING: tmp.add(parser.getValueAsString()); break; case VALUE_NUMBER_INT: tmp.add(String.valueOf(parser.getValueAsInt())); break; case VALUE_NULL: tmp.add("null"); break; default: throw new IllegalStateException("Il token è di un tipo non specificato!"); } } return tmp; } }
per funzionare funziona, ma:
- mi chiedevo se e come potevo migliorare il codice
- soprattutto per il fatto che così non creo "l'intestazione" del file; vorrei crearla partendo dal nome dei campi, e l'unica cosa che mi è venuta in mente è fare un'altra iterazione in un altro metodo solo sul primo record e prendere i nomi dei campi (ma non mi sembra un granchè come soluzione....).

Rispondi quotando