2011-08-24 20 views
28

Qualcuno ha un codice Java di esempio per convertire un documento JSON in un file XLS/CSV? Ho provato a cercare su Google ma inutilmente.Conversione da JSON a XLS/CSV in Java

+0

See Matt York qui: http://stackoverflow.com/questions/662859/convert-csv -xls-to-json – JMax

+0

Chiede Json a CSV ... non in altro modo. –

risposta

-2

Un documento JSON è costituito essenzialmente da elenchi e dizionari. Non esiste un modo ovvio per mappare tale datastructure su una tabella bidimensionale.

+1

Se il file JSON è un array piatto, con tutti gli oggetti con gli stessi nomi di campo, può essere mappato su una tabella bidimensionale. Vedi l'input di esempio di Sridhar. –

3

è possibile utilizzare commons CSV per convertire in formato CSV. o usare POI per convertire in xls. se hai bisogno di aiuto per convertire in xls, puoi usare jxls, può convertire java bean (o lista) in excel con linguaggio di espressione.

Fondamentalmente, il documento json è forse un array json, giusto? quindi sarà lo stesso. il risultato sarà la lista, e tu scrivi la proprietà che vuoi mostrare in formato excel che verrà letta da jxls. Vedi http://jxls.sourceforge.net/reference/collections.html

Se il problema è che json non può essere letto nella proprietà excel jxls, serializzarlo prima nella raccolta di java bean.

+0

Come dovresti mappare '{'foo': {'bar': [1, 2, 3]}}' a un foglio di calcolo? –

+0

Ecco perché ho detto, se l'oggetto json è json single object, non json array, il risultato sarà 1 riga nel foglio di calcolo. Se l'oggetto json è array json, le righe saranno uguali alla dimensione dell'array json. E ancora una volta, devi specificare quale proprietà vuoi scrivere in quel foglio di calcolo. Se il tuo esempio, se vuoi visualizzare la barra (che è il valore dell'array), la colonna verrà visualizzata forse [email protected], ma è un array, giusto. Ma se l'oggetto è [{nome: 'a', 'bar': [1,2,3]}, {nome: 'b', 'bar': [2,3,4]}], e vuoi per visualizzare solo il nome, è fattibile, giusto? – Jef

25

È possibile convertire un array JSON in un file CSV.

Diciamo, si dispone di un JSON come il seguente:

{"infile": [{"field1": 11,"field2": 12,"field3": 13}, 
      {"field1": 21,"field2": 22,"field3": 23}, 
      {"field1": 31,"field2": 32,"field3": 33}]} 

permette di vedere il codice per la conversione in formato CSV:

import java.io.File; 
import java.io.IOException; 

import org.apache.commons.io.FileUtils; 
import org.json.CDL; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

public class JSON2CSV { 
    public static void main(String myHelpers[]){ 
     String jsonString = "{\"infile\": [{\"field1\": 11,\"field2\": 12,\"field3\": 13},{\"field1\": 21,\"field2\": 22,\"field3\": 23},{\"field1\": 31,\"field2\": 32,\"field3\": 33}]}"; 

     JSONObject output; 
     try { 
      output = new JSONObject(jsonString); 


      JSONArray docs = output.getJSONArray("infile"); 

      File file=new File("/tmp2/fromJSON.csv"); 
      String csv = CDL.toString(docs); 
      FileUtils.writeStringToFile(file, csv); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     }   
    } 

} 

Ora è ottenuto il CSV generato da JSON.

Esso dovrebbe essere simile a questo:

field1,field2,field3 
11,22,33 
21,22,23 
31,32,33 

La dipendenza Maven era come,

<dependency> 
    <groupId>org.json</groupId> 
    <artifactId>json</artifactId> 
    <version>20090211</version> 
</dependency> 
risposta di
+0

Grazie per questo codice, ma sono nuovo di Java e ho problemi a farlo funzionare. Le variabili 'jsonout' e' response' non sono definite. Qualche idea? Grazie ancora! – hhh

+0

FileUtils.writeStringToFile (file, csv); è deprecato –

+0

c'è un altro modo di usare org.json.CDL? Mi sembra di non essere in grado di importare quella classe nel mio progetto Android – keinabel