Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Consiglio su parsing JSON

    ciao!

    ho scaricato un file di questo tipo da un servizio esterno, e vorrei integrarlo sia una app mobile, che in una applicazione desktop:
    codice:
    {"_id":707860,"name":"Hurzuf","country":"UA","coord":{"lon":34.283333,"lat":44.549999}}
    {"_id":519188,"name":"Novinki","country":"RU","coord":{"lon":37.666668,"lat":55.683334}}
    {"_id":1283378,"name":"Gorkhā","country":"NP","coord":{"lon":84.633331,"lat":28}}
    il file contiene 209579 righe.
    ogni riga è in formato json valido, ma nel complesso il file json non è corretto / valido.

    quello che doovrei fare è creare una casella autocomplete, in cui vengono controllati i risultati man mano che si scrive.
    però, per come'è fatto il file, dovrei:
    -leggere tutte le righe
    -di ogni riga fare il parsing
    -controllare se il campo name o country siano corrispondenti a quanto scritto

    non penso sia molto efficiente.
    a questo punto non so che fare.
    correggere il file rendendolo conforme, potrebbe essere una opzione:
    ma a mano ci metto troppo visto che quante righe sono.

    metterlo in un db poteva essere una buona soluzione, però preferirei tenerlo sul device / filesystem.

    avete qualche consiglio da darmi??

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Puoi tentare trasformando il tutto in un JSON Array (puoi farlo sia creando un nuovo file, sia facendolo in-memory). Ad esempio:

    codice:
    FileWriter fw = null;
    BufferedWriter bw = null;
    PrintWriter pw = null;
    FileReader fr = null;
    BufferedReader br = null;
    try {
       fr = new FileReader( ... );   // Percorso al tuo file
       br = new BufferedReader( fr );
    
       fw = new FileWriter("nuovo_file.txt");
       bw = new BufferedWriter( bw );
       pw = new PrintWriter( pw );
    
       pw.print("\"pippo\":[");
    
       String line = null;
       StringBuilder sb = new StringBuilder();
       while((line = br.readLine()) != null) {
          if (sb.length() >  0) pw.println( sb.toString() );
          sb.setLength( 0 );
          sb.append( line ).append(",");
       }
       sb.deleteCharAt(sb.length() - 1);
       sb.append("]");
       pw.println( sb.toString() );
       pw.flush();
    } catch (Exception e) {
       e.printStackTrace();
    } finally {
       if (br != null) {
          try { br.close(); } catch (Exception e) { }
       } else {
          if (fr != null) {
             try { fr.close(); } catch (Exception e) { }
          }
       }
    
       if (pw != null) {
          try { pw.close(); } catch (Exception e) { }
       } else {
          if (bw != null) {
             try { bw.close(); } catch (Exception e) { }
          } else {
             if (fw != null) {
                try { fw.close(); } catch (Exception e) { }
             }
          }
       }
    }

    A questo punto hai un nuovo file che dovrebbe rappresentare un JSON Array valido in cui ogni elemento è un JSON Object corrispondente ad ogni tua riga.
    Non l'ho testato, ma dovrebbe andare... va calibrato un attimo sull'ultima riga se il file termina con uno o più A-CAPO.


    Ciao.
    Ultima modifica di LeleFT; 07-08-2015 a 13:39
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    ciao!

    grazie per il consiglio!
    ho usato il tuo codice per creare un file json corretto.

    ma sto notando che risulta un pò pesante in ambito mobile.
    considera che occupa 20mb e con tutte quelle righe, a volte la app risulta un pò lenta.
    forse devo cambiare approccio.
    ci sto pensando...

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.