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>>:
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;
    }

}
poi prendo la lista e la passo ad un'altra classe cha la elabora e crea l'excel.
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....).