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 | Sí | -- | 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
30en el CSV se convierte en"30"en el JSON, no en30. - 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.