2011-08-24 19 views
28

¿Alguien tiene un código Java de muestra para convertir un documento JSON en un archivo XLS/CSV? Intenté buscar en Google pero fue en vano.Conversión de JSON a XLS/CSV en Java

+0

Ver Matt York aquí: http://stackoverflow.com/questions/662859/convert-csv -xls-to-json – JMax

+0

Está pidiendo Json para CSV ... no de otra manera. –

Respuesta

-2

Un documento JSON consiste básicamente en listas y diccionarios. No hay una manera obvia de mapear dicha estructura de datos en una tabla bidimensional.

+1

Si el archivo JSON es una matriz plana, con todos los objetos con los mismos nombres de campo, se puede asignar a una tabla bidimensional. Ver la entrada de ejemplo de @ Sridhar. –

3

puede usar commons csv para convertir a formato CSV. o use POI para convertir a xls. si necesita ayuda para convertir a xls, puede usar jxls, puede convertir java bean (o list) en excel con el lenguaje de expresión.

Básicamente, el json doc tal vez es una matriz json, ¿verdad? entonces será lo mismo. el resultado será una lista, y usted solo escribirá la propiedad que desea visualizar en formato excel que será leída por jxls. Consulte http://jxls.sourceforge.net/reference/collections.html

Si el problema es que el json no se puede leer en la propiedad jxls excel, simplemente serialícelo primero en la colección de java bean.

+0

¿Cómo asignaría '{'foo': {'bar': [1, 2, 3]}}' a una hoja de cálculo? –

+0

Es por eso que dije, si el objeto json es json un solo objeto, no json array, el resultado será 1 fila en la hoja de cálculo. Si el objeto json es json array, las filas serán las mismas con el tamaño de la matriz json. Y 1 de nuevo, debe especificar qué propiedad desea escribir en esa hoja de cálculo. Si su ejemplo, si desea mostrar la barra (que el valor es una matriz), la columna se mostrará tal vez [email protected], pero es una matriz, a la derecha. Pero si el objeto es [{name: 'a', 'bar': [1,2,3]}, {name: 'b', 'bar': [2,3,4]}], y desea para mostrar solo el nombre, es factible, ¿verdad? – Jef

25

Solo puede convertir una matriz JSON en un archivo CSV.

Digamos, usted tiene un JSON como el siguiente:

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

deja ver el código para convertir a 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(); 
     }   
    } 

} 

Ahora usted tiene la CSV genera a partir de JSON.

Se debe tener este aspecto:

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

La dependencia Maven era como,

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

Gracias por este código, pero soy nuevo en Java y tengo problemas para hacerlo funcionar. Las variables 'jsonout' y' response' no están definidas. ¿Alguna idea? ¡Gracias de nuevo! – hhh

+0

FileUtils.writeStringToFile (archivo, csv); está en desuso –

+0

¿hay alguna otra manera que usar org.json.CDL? Parece que no puedo importar esa clase en mi proyecto de Android – keinabel