API de JSON a CSV#

Convierte un archivo JSON a CSV con una sola petición a POST /v1/convert/json-to-csv. La entrada debe ser un array JSON de objetos; las cabeceras de columna se derivan de las claves del primer objeto y las filas se delimitan con comas usando entrecomillado QUOTE_MINIMAL. Por defecto la respuesta son los bytes CSV sin procesar; establece direct_download=false para recibir en su lugar metadatos con una URL de descarga prefirmada.


Endpoint#

POST /v1/convert/json-to-csv

Content-Type: multipart/form-data

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

Formato de salida: .csv (text/csv)


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 .json a convertir. Debe contener un array JSON de objetos. Codificado en UTF-8.
output_filename string No Nombre del archivo de entrada Nombre de archivo de salida personalizado. La extensión .csv se añade automáticamente.
direct_download boolean No true Con true, devuelve los bytes CSV sin procesar. Con false, devuelve metadatos con una URL de descarga prefirmada.

Reglas de conversión#

[
  {"name": "Alice", "age": 30, "city": "London"},
  {"name": "Bob", "age": 25, "city": "Paris"}
]

Se convierte en:

name,age,city
Alice,30,London
Bob,25,Paris
  • La entrada debe ser un array JSON de objetos (lista de diccionarios)
  • Las cabeceras de columna se derivan solo de las claves del primer objeto
  • El delimitador es la coma (no configurable)
  • El entrecomillado sigue QUOTE_MINIMAL -- los valores que contienen comas, comillas o saltos de línea se entrecomillan
  • Los objetos o arrays anidados en los valores se serializan como su representación en string (no se aplanan)
Importante: Si los objetos del array tienen claves distintas, las claves adicionales de los objetos posteriores se descartan silenciosamente. Las claves ausentes producen valores vacíos. Para obtener los mejores resultados, asegúrate de que todos los objetos tengan el mismo conjunto de claves.

Respuesta#

Descarga directa (direct_download=true, por defecto)#

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

Respuesta con metadatos (direct_download=false)#

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

Ejemplos de código#

Python#

import requests

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

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

Node.js#

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

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

const csv = await response.text();

PHP#

$ch = curl_init("https://api.enconvert.com/v1/convert/json-to-csv");
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.json", "application/json")]
]);
$csv = curl_exec($ch);
curl_close($ch);

Go#

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

req, _ := http.NewRequest("POST", "https://api.enconvert.com/v1/convert/json-to-csv", 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 .json
400 Bad Request Contenido JSON no válido
400 Bad Request El JSON debe ser un array de objetos para la conversión a CSV
400 Bad Request El array JSON está vacío
400 Bad Request El array JSON debe contener objetos (diccionarios)
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
Estructura de entrada Solo array de objetos
Conversiones mensuales Según el plan

Preguntas frecuentes#

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

Envía una petición POST multipart/form-data a /v1/convert/json-to-csv con un archivo .json que contenga un array de objetos en el campo file, autenticada con una cabecera X-API-Key o un token JWT Authorization: Bearer. La respuesta es CSV delimitado por comas.

¿Qué pasa si los objetos JSON tienen claves distintas?#

Las cabeceras de columna provienen solo de las claves del primer objeto. Las claves adicionales de los objetos posteriores se descartan silenciosamente y las claves ausentes producen valores vacíos, así que asegúrate de que todos los objetos compartan el mismo conjunto de claves para obtener los mejores resultados.

¿Los objetos JSON anidados se aplanan en columnas CSV?#

No. Los objetos o arrays anidados en los valores se serializan como su representación en string en lugar de aplanarse en columnas separadas.

¿Puedo cambiar el delimitador del CSV?#

No. El delimitador es siempre la coma y no es configurable. El entrecomillado sigue QUOTE_MINIMAL, así que los valores que contienen comas, comillas o saltos de línea se entrecomillan automáticamente.

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

Se devuelve un 400 cuando el archivo no es .json, el JSON no es válido, el JSON no es un array de objetos o el array está vacío. Los archivos demasiado grandes devuelven 413 Payload Too Large.