convertir CSV / XLS a JSON? [cerrado]

142

¿Alguien sabe si hay una aplicación que me permita convertir preferiblemente XLS a JSON?

También me conformaré con un convertidor de CSV ya que eso es lo que probablemente terminaré teniendo que escribir yo mismo si no hay nada alrededor.

mkoryak
fuente
¿Cómo se estructura el XLS? ¿Asume que la primera fila son los encabezados de columna?
SheetJS
CsvCruncher toma CSV como una tabla SQL y le permite hacer una SELECCIÓN, exportando el resultado como CSV o JSON. github.com/OndraZizka/csv-cruncher
Ondra Žižka
Esto se puede hacer fácilmente usando el marco de datos de pandas. Importe su csv al marco de datos de pandas y conviértalo a json.
R4444
1
Te sugiero que mires Data Transformer (descargo de responsabilidad: soy su desarrollador). Convierte entre CSV, JSON, XML y YML localmente. Ofrece una serie de configuraciones de conversión (con buenos valores predeterminados) para que pueda adaptar el resultado a sus propósitos. Puede obtenerlo en Mac App Store o Microsoft Store .
Geo Systems

Respuestas:

77

Esto funcionó perfectamente para mí y NO requiere la carga de un archivo:

https://github.com/cparker15/csv-to-json?files=1

zmonteca
fuente
Si desea convertir a texto puede pegar su código, use la opción "Actionscript".
Steve O'Connor
Desafortunadamente este sitio fue abajo
Mazen Kasser
3
Parece que la fuente está en GIT: github.com/cparker15/csv-to-json?files=1
zmonteca
@zmonteca Actualizó la respuesta con su enlace
robertc
Gracias, funciona. solo necesita actualizar las dependencias de este proyecto, de lo contrario no se ejecutará
hd84335
195

Puedes probar esta herramienta que hice:

Mr. Data Converter

Se convierte a JSON, XML y otros.

También es del lado del cliente, por lo que sus datos nunca salen de su computadora.

Shan Carter
fuente
parece interesante, mal volver a este cuando tengo necesidad de nuevo
mkoryak
66
Está bien, pero tenga en cuenta que no escapa a las comillas correctamente. Cuando su CSV contiene comillas dobles, la salida no se le escapa. Puede que tenga que hacerlo a mano. Herramienta muy útil, no obstante.
barrycarton
Gran herramienta! bien hecho. @barrycarton parece que esto se ha solucionado si extrae el último código de Github. El que está en el enlace de arriba parece anticuado.
Bach
Hola @Shan Carter, quiero que el usuario solo cargue el archivo de Excel, no copie el contenido de Excel, ¿es posible con el código actual o debería bifurcarlo (si es posible hacerlo)? Por favor comparte tus pensamientos.
Rahul Gautam
1
Impresionante herramienta, @Shan Carter. Me tomé la libertad de arreglar algunas cosas en mi tenedor aquí: thdoan.github.io/mr-data-converter
thdoan
38

Desde Powershell 3.0 (incluido con Windows 8, disponible para Windows 7 y Windows Server 2008 pero no Windows Vista) puede usar el comando incorporado convertto-json:

PS E:> $topicsjson = import-csv .\itinerary-all.csv | ConvertTo-Json 

PS E:\> $topicsjson.Length
11909

PS E:\> $topicsjson.getType()

IsPublic IsSerial Name                                     BaseType                  
-------- -------- ----                                     --------                  
True     True     Object[]                                 System.Array              

Página de ayuda en línea en Technet

knb
fuente
77
Crédito adicional: guarde json en un archivo ... $ topicsjson | Add-Content -Path "mydata.json"
brady321
28

Si no puede encontrar una solución existente, es bastante fácil crear una solución básica en Java. Acabo de escribir uno para un cliente y me tomó solo un par de horas, incluidas las herramientas de investigación.

Apache POI leerá el binario de Excel. http://poi.apache.org/

JSONObject construirá el JSON

Después de eso, solo es cuestión de iterar a través de las filas en los datos de Excel y construir una estructura JSON. Aquí hay un pseudocódigo para el uso básico.

FileInputStream inp = new FileInputStream( file );
Workbook workbook = WorkbookFactory.create( inp );

// Get the first Sheet.
Sheet sheet = workbook.getSheetAt( 0 );

    // Start constructing JSON.
    JSONObject json = new JSONObject();

    // Iterate through the rows.
    JSONArray rows = new JSONArray();
    for ( Iterator<Row> rowsIT = sheet.rowIterator(); rowsIT.hasNext(); )
    {
        Row row = rowsIT.next();
        JSONObject jRow = new JSONObject();

        // Iterate through the cells.
        JSONArray cells = new JSONArray();
        for ( Iterator<Cell> cellsIT = row.cellIterator(); cellsIT.hasNext(); )
        {
            Cell cell = cellsIT.next();
            cells.put( cell.getStringCellValue() );
        }
        jRow.put( "cell", cells );
        rows.put( jRow );
    }

    // Create the JSON.
    json.put( "rows", rows );

// Get the JSON text.
return json.toString();
Matt York
fuente
Si tengo Excel almacenado en E: /exceloutput.xlsx. ¿Cuáles serían los valores en file e inp en las dos primeras líneas?
Kate
11

Esto funciona para mí y se ejecuta en el lado del cliente: http://www.convertcsv.com/csv-to-json.htm

dataman
fuente
1
Gracias por su sugerencia :) El convertidor funciona bien.
Nekto
1
Este incluye el delimitador de pestañas, por lo que puede pegar directamente desde Excel.
Arlen Beiler
6

Acabo de encontrar esto:

http://tamlyn.org/tools/csv2json/

(Nota: debe tener su archivo csv disponible a través de una dirección web)

DanDan
fuente
1
Este servicio necesita un botón de carga.
neoneye
2
la web se cayó
Fai Zal Dong
Link no funciona
Aditya
6

Pruebe la pequeña herramienta gratuita:

http://keyangxiang.com/csvtojson/

Utiliza el módulo node.js csvtojson

Keyang
fuente
Ya no se vive.
gm2008
El enlace está actualizado. Deberia de funcionar.
Keyang
Está en GitHub . Esta es la herramienta más flexible. Quería una forma de crear matrices anidadas u objetos usando CSV ( ejemplo ).
Michael McGinnis
5

Ninguna de las soluciones existentes funcionó, así que rápidamente pirateé un script que haría el trabajo. También convierte cadenas vacías en nulos y separa la fila de encabezado para JSON. Es posible que deba ajustarse según el dialecto CSV y el juego de caracteres que tenga.

#!/usr/bin/python
import csv, json
csvreader = csv.reader(open('data.csv', 'rb'), delimiter='\t', quotechar='"')
data = []
for row in csvreader:
    r = []
    for field in row:
        if field == '': field = None
        else: field = unicode(field, 'ISO-8859-1')
        r.append(field)
    data.append(r)
jsonStruct = {
    'header': data[0],
    'data': data[1:]
}
open('data.json', 'wb').write(json.dumps(jsonStruct))
Tronic
fuente
¿Está esto relacionado con johntron.com/creations/csv-to-json
David
No, excepto que se están utilizando las mismas bibliotecas (csv, json). Escribí mi código desde cero. Los bucles son necesarios para el procesamiento que quería hacer (conversión de juego de caracteres y reemplazo de cadenas vacías con nulos).
Tronic
Me pregunto sobre el conflicto entre muchos de los comentarios que dicen "esto funcionó para mí" y este afirmando que "ninguna de las soluciones existentes funcionó".
B. Clay Shannon
4

En lugar de convertidores codificados, qué tal el soporte CSV para Jackson (procesador JSON): https://github.com/FasterXML/jackson-dataformat-csv . Así que el núcleo Jackson puede leer JSON como POJO, mapas JsonNode, casi cualquier cosa. Y el soporte CSV puede hacer lo mismo con CSV. Combine los dos y es un convertidor muy potente pero simple entre múltiples formatos (ya hay backends para XML, YAML y más).

Puede encontrar un artículo que muestra cómo hacer esto aquí .

StaxMan
fuente
3

Vea si esto ayuda: Volver a CSV - Convertir texto CSV a Objetos; vía JSON

Esta es una publicación de blog publicada en noviembre de 2008 que incluye el código C # para proporcionar una solución.

De la introducción en la publicación del blog:

Como Json es más fácil de leer y escribir, entonces Xml. Se deduce que CSV (valores separados por comas) es más fácil de leer y escribir que Json. CSV también tiene herramientas como Excel y otras que facilitan el trabajo y la creación. Entonces, si alguna vez desea crear un archivo de configuración o datos para su próxima aplicación, aquí hay un código para convertir CSV a JSON a objetos POCO

qxotk
fuente
1
Gracias. los malos tienen al puerto este de Java, pero mejor que tratar de reinventar la rueda
mkoryak
Me alegro de que funcione, c # -> Java es una muy buena combinación de todos modos.
qxotk