Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    561

    Creazione file JSON con la libreria GSON

    Buongiorno,
    un'applicazione Java Standard e ho scritto un metodo che dovrebbe creare un file JSON in cui siano presenti diciamo tutti i record delle vendite effettuate. Il metodo è il seguente:

    codice:
    public Vendite creaVendite(String cod, Date data, int pezzi) throws JsonIOException, IOException {        int anno=0;int mese=0,giorno=0;
            gsonBuilder.registerTypeAdapter(Vendite.class, new VenditaAdapter());
            Gson gson = gsonBuilder.create();
            String path = "C:\\Users\\Utente\\vendite.json";
            
            
            Vendite v = new Vendite();
            Scanner in = new Scanner(System.in);
            Scanner inInt = new Scanner(System.in);
            
            System.out.println("Inserisci il codice della vendita effettuata");
            cod = in.nextLine();
            v.setCodice(cod);
            System.out.print("Insersci l'anno: ");
            anno = inInt.nextInt();
            //v.setAnno(anno);
            
            if(anno>0 && bisestile(anno) ) {
                /* Gestire i giorni del mese di febbraio*/
                System.out.print("Inserisci il mese: ");
                mese = in.nextInt();
                if(mese ==4 || mese==6 || mese==9 || mese==11) {
                    System.out.println("Inserisci l giorno: ");
                    giorno=inInt.nextInt();
                    while(giorno!=30) {
                        System.err.println("Il giorno inserito non è corretto. Prova a reinserirlo!");
                        giorno=inInt.nextInt();
                    }
                }else if(mese==1 || mese==3 || mese==5 || mese==7 || mese==8 || mese==10 || mese==12) {
                    System.out.println("Inserisci l giorno: ");
                    giorno=inInt.nextInt();
                    while(giorno!=31) {
                        System.err.println("Il giorno inserito non è corretto. Prova a reinserirlo!");
                        giorno=inInt.nextInt();
                    }     
                }else {
                    System.out.println("Inserisci l giorno: ");
                    giorno=inInt.nextInt();
                    while(!(giorno>=1 && giorno<=29) && giorno<0) {
                        System.err.println("Il giorno inserito non è corretto in quanto l'anno inserito è bisestile. Prova a reinserirlo!");
                          giorno=inInt.nextInt();
                    }        
                }  
                
            }else {
                /* L'anno non è bisestile */
                System.out.println("Inserisci il mese: ");
                mese=inInt.nextInt();
                if(mese ==4 || mese==6 || mese==9 || mese==11) {
                    System.out.println("Inserisci l giorno: ");
                    giorno=inInt.nextInt();
                    while(giorno!=30) {
                        System.err.println("Il giorno inserito non è corretto. Prova a reinserirlo!");
                        giorno=inInt.nextInt();
                    }
                }else if(mese==1 || mese==3 || mese==5 || mese==7 || mese==8 || mese==10 || mese==12) {
                    System.out.println("Inserisci l giorno: ");
                    giorno=inInt.nextInt();
                    while(giorno!=31) {
                        System.err.println("Il giorno inserito non è corretto. Prova a reinserirlo!");
                        giorno=inInt.nextInt();
                    }     
                }else {
                    System.out.println("Inserisci l giorno: ");
                    giorno=inInt.nextInt();
                    while(!(giorno>=1 && giorno<=28) && giorno<0) {
                        System.err.println("Il giorno inserito non è corretto in quanto l'anno inserito è bisestile. Prova a reinserirlo!");
                          giorno=inInt.nextInt();
                    }
                    
                }  
                @SuppressWarnings("deprecation")
                Date d=new Date(giorno, mese, anno);
                v.setData(d);
                
                
                System.out.println("Inserisci il numero di pezzi");
                pezzi=inInt.nextInt();
                v.setPezzi(pezzi);
                
                System.out.println(v.toString());
                
                
                gson.toJson(v, new FileWriter(path));
                
                String jsonString = gson.toJson(v);
                System.out.println(jsonString);
                
            }    
    
    
            return v;
    
    
        }
    Questo metodo crea il file vendite.json ma è vuoto. Perché?

    Grazie
    tulipan

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da tulipan Visualizza il messaggio
    Questo metodo crea il file vendite.json ma è vuoto. Perché?
    Innanzitutto si vedono qui delle cose abbastanza "brutte". Sicuramente quella parte ripetitiva e molto fumosa di controllo sui mesi, anni bisestili, ecc... Queste logiche NON le dovresti (ri)scrivere tu. E poi anche l'uso di quel costruttore di Date che è deprecato da decenni ....

    Se si parte con i 3 dati giorno/mese/anno "sciolti", il modo più giusto sarebbe di passare prima per un Calendar (GregorianCalendar specificatamente) e poi da questo al java.util.Date.
    Cosa ancora migliore sarebbe sfruttare la nuova Date/Time API introdotta in Java 8 (Instant, LocalDate, LocalTime ecc...) che è molto meglio rispetto ai Date/Calendar.

    Riguardo il JSON con Gson, innanzitutto Gson per suo design si basa solo sui field degli oggetti (e non sulle proprietà JavaBeans desunte dai metodi getter/setter). Dovresti mostrare come è fatta Vendite e anche cosa fa VenditaAdapter. E soprattutto, perché hai dovuto fare un adapter? Cosa NON riesci a fare senza adapter?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.