2010-08-05 14 views
5

Morto silenzio! Non succede spesso su StackOverflow ... Ho aggiunto una piccola taglia per far funzionare le cose!Come si modifica una stringa json di grandi dimensioni?

Ho creato un documento JSON contenente informazioni sulla posizione di vari paesi. Ho aggiunto alcune chiavi personalizzate. Questo è l'inizio del JSON-file:

{ 
    "type": "FeatureCollection", 
    "features": [ 
     { "type": "Feature", "properties": { 
      "NAME": "Antigua and Barbuda", 
      "banned/censored": "AG", 
      "Bombed": 29, 
      "LON": -61.783000, "LAT": 17.078000 }, 
    "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -61.686668,... 

Tutti i pulsanti personalizzati (come bombardato, bandito/ecc censurata) hanno valori, ma sono solo vecchi (falso, se si desidera) valori. I valori reali sono conservati in un file .csv estratto da un documento excel.

I ad es. avere questo:

      banned/censored  bombed 
Antigua and Barbuda    2     120 
... 

Ora voglio abbinare questi valori con la chiave corretta nel file json. C'è qualche programma là fuori che posso usare? Un'altra opzione sarebbe una libreria json per java, che in qualche modo supporta ciò che voglio. Non sono ancora riuscito a trovare una soluzione facile. Il documento è piuttosto grande ~ 10 MB, se fa alcuna differenza!

MODIFICA: ho utilizzato QGIS per manipolare il file .shp, quindi potrebbe essere utile anche un qualche tipo di estensione.

risposta

7

Basta convertire sia JSON che CSV in un oggetto Java completo. In questo modo è possibile scrivere qualsiasi logica Java secondo i propri gusti per modificare gli oggetti Java a seconda dell'uno o dell'altro. Infine converti l'oggetto Java modificato che rappresenta i dati JSON in una stringa JSON.

C'è comunque un problema nel tuo JSON. Il / in banned/censored non è un carattere valido per un nome di campo JSON, quindi molti dei deserializzatori JSON esistenti potrebbero soffocare su questo. Se risolvi questo problema, sarai in grado di usarne uno.

Posso consigliare l'utilizzo di Google Gson per la conversione tra JSON e Java. Ecco un esempio di kickoff in base alla struttura JSON (con banned/censored rinominato bannedOrCensored):

class Data { 
    private String type; 
    private List<Feature> features; 
} 

class Feature { 
    private String type; 
    private Properties properties; 
    private Geometry geometry; 
} 

class Properties { 
    private String NAME; 
    private String bannedOrCensored; 
    private Integer Bombed; 
    private Double LON; 
    private Double LAT; 
} 

class Geometry { 
    private String type; 
    private Double[][][][] coordinates; 
} 

Hai solo bisogno di aggiungere/generare getter e setter te stesso. Poi, sarete in grado di convertire tra JSON e Java piace segue:

Data data = new Gson().fromJson(jsonString, Data.class); 

per la conversione tra CSV e un oggetto Java, basta scegliere uno dei tanti parser CSV, come OpenCSV. Puoi anche andare in casa con l'aiuto di BufferedReader.

Infine, dopo aver modificato l'oggetto Java che rappresenta i dati JSON, è possibile convertire di nuovo alla stringa JSON con l'aiuto di GSON come segue:

String json = new Gson().toJson(data); 
+0

Questo era quello che speravo di evitare. Ad ogni modo, farò un tentativo. Grazie! –

+0

Cosa avevi in ​​mente? Qualche magia? – BalusC

+2

Un programma che supportava alcune delle funzionalità che sto cercando. Come un'estensione a QGIS, o qualsiasi altra cosa - come per magia. Ad ogni modo, le cose stanno andando. –

3

Mentre la risposta di BalusC ti dice come farlo nel vostro attuale setup, ho un suggerimento più radicale: sbarazzarsi di JSON.

L'idea JSON non è pensata per memorizzare i dati: è pensata per essere utilizzata come "standard aperto basato su testo leggero progettato per lo scambio di dati leggibili".Cioè: (dati poco non significative come possibile)

  • basso traffico
  • leggibile
  • facile da maneggiare con linguaggi dinamici

depositi di dati, d'altra parte hanno molti più requisiti di questo. Ecco perché esistono database. Quindi sposta la tua memoria in un database. Se non si desidera un database completo, utilizzare qualcosa come HSQLDB o JavaDB.

+0

Hai ragione. Non mi piace JSON me stesso per l'archiviazione dei dati. Ma mentre lavoravo con i file OpenLayers e .shp, ho pensato che fosse il formato più facile da utilizzare, poiché OpenLayers utilizza geojson e i file .shp possono essere convertiti in geojson tramite gdal. –

Problemi correlati