API de CSV a JSON#

Convierte un archivo CSV a un array JSON con una sola petición a POST /v1/convert/csv-to-json. La primera fila se usa como cabeceras de columna y cada fila siguiente se convierte en un objeto JSON dentro del array de salida, con todos los valores conservados como strings (sin inferencia de tipos). Las respuestas devuelven los bytes JSON sin procesar por defecto, o metadatos con una URL de descarga prefirmada cuando direct_download=false.


Endpoint#

POST /v1/convert/csv-to-json

Content-Type: multipart/form-data

Entrada aceptada: archivos .csv (codificados en UTF-8)

Formato de salida: .json (application/json)


Autenticación#

Requiere una clave API privada o un token JWT obtenido de una clave pública.

X-API-Key: sk_your_private_key

O bien:

Authorization: Bearer <jwt_token>

Parámetros de la petición#

Parámetro Tipo Obligatorio Por defecto Descripción
file file -- El archivo .csv a convertir. La primera fila debe contener las cabeceras de columna. Codificado en UTF-8.
output_filename string No Nombre del archivo de entrada Nombre de archivo de salida personalizado. La extensión .json se añade automáticamente.
direct_download boolean No true Con true, devuelve los bytes JSON sin procesar. Con false, devuelve metadatos con una URL de descarga prefirmada.

Reglas de conversión#

name,age,city
Alice,30,London
Bob,25,Paris

Se convierte en:

[
  {"name": "Alice", "age": "30", "city": "London"},
  {"name": "Bob", "age": "25", "city": "Paris"}
]
  • La primera fila se trata como cabeceras de columna
  • El delimitador es la coma (no configurable)
  • Todos los valores permanecen como strings en la salida JSON -- no se realiza inferencia de tipos. El número 30 en el CSV se convierte en "30" en el JSON, no en 30.
  • La salida es JSON con formato legible e indentación de 2 espacios

Respuesta#

Descarga directa (direct_download=true, por defecto)#

HTTP 200 OK
Content-Type: application/json
Content-Disposition: inline; filename="data_20260405_123456789.json"

Respuesta con metadatos (direct_download=false)#

{
    "presigned_url": "https://spaces.example.com/...",
    "object_key": "env/files/{project_id}/csv-to-json/data_20260405_123456789.json",
    "filename": "data_20260405_123456789.json",
    "file_size": 1234,
    "conversion_time_seconds": 0.03
}

Ejemplos de código#

Python#

import requests

with open("data.csv", "rb") as f:
    response = requests.post(
        "https://api.enconvert.com/v1/convert/csv-to-json",
        headers={"X-API-Key": "sk_your_private_key"},
        files={"file": ("data.csv", f, "text/csv")}
    )

with open("data.json", "wb") as out:
    out.write(response.content)

Node.js#

const form = new FormData();
form.append("file", fs.createReadStream("data.csv"));

const response = await fetch("https://api.enconvert.com/v1/convert/csv-to-json", {
    method: "POST",
    headers: { "X-API-Key": "sk_your_private_key" },
    body: form
});

const json = await response.json();

PHP#

$ch = curl_init("https://api.enconvert.com/v1/convert/csv-to-json");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ["X-API-Key: sk_your_private_key"],
    CURLOPT_POSTFIELDS => ["file" => new CURLFile("data.csv", "text/csv")]
]);
$json = curl_exec($ch);
curl_close($ch);

Go#

body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("file", "data.csv")
file, _ := os.Open("data.csv")
io.Copy(part, file)
writer.Close()

req, _ := http.NewRequest("POST", "https://api.enconvert.com/v1/convert/csv-to-json", body)
req.Header.Set("Content-Type", writer.FormDataContentType())
req.Header.Set("X-API-Key", "sk_your_private_key")
resp, _ := http.DefaultClient.Do(req)

Respuestas de error#

Estado Condición
400 Bad Request El archivo no es un archivo .csv
400 Bad Request El archivo CSV está vacío o no tiene filas válidas
400 Bad Request Codificación CSV no válida (se espera UTF-8)
401 Unauthorized Clave API o token JWT ausente o no válido
402 Payment Required Cuota mensual de ops agotada
413 Payload Too Large El archivo supera el tamaño máximo de archivo del plan

Límites#

Límite Valor
Tamaño máximo de archivo Según el plan (Founding: 5 MB)
Codificación de entrada Solo UTF-8
Inferencia de tipos Ninguna (todos los valores son strings)
Conversiones mensuales Según el plan

Preguntas frecuentes#

¿Cómo convierto CSV a JSON con una API REST?#

Envía una petición POST multipart/form-data a /v1/convert/csv-to-json con tu archivo .csv en el campo file, autenticada con una cabecera X-API-Key o un token JWT Authorization: Bearer. La primera fila debe contener las cabeceras de columna.

¿Por qué los números de mi CSV se devuelven como strings en el JSON?#

No se realiza inferencia de tipos. Todos los valores permanecen como strings en la salida JSON. El número 30 en el CSV se convierte en "30" en el JSON, no en 30.

¿Puedo usar un delimitador distinto de la coma?#

No. El delimitador es siempre la coma y no es configurable.

¿Puedo obtener una URL de descarga prefirmada en lugar de los bytes JSON sin procesar?#

Sí. Establece direct_download=false para recibir metadatos con presigned_url, object_key, filename, file_size y conversion_time_seconds.

¿Por qué la API de CSV a JSON devuelve 400 Bad Request?#

Se devuelve un 400 cuando el archivo no es un archivo .csv, el CSV está vacío o no tiene filas válidas, o la codificación no es UTF-8. Los archivos demasiado grandes devuelven 413 Payload Too Large.