Salida JSON
Convertir el CSV de ejemplo produce esta salida:
[
{
"name": "Alice Chen",
"email": "alice@example.com",
"role": "admin",
"active": true
},
{
"name": "Bob Martinez",
"email": "bob@example.com",
"role": "editor",
"active": true
},
{
"name": "Carol Williams",
"email": "carol@example.com",
"role": "viewer",
"active": false
}
]
La primera fila genera las claves. Cada fila siguiente se convierte en un objeto. Los valores true y false en la columna active se convierten en booleanos JSON porque coinciden exactamente con los strings literales booleanos.
Reglas de Análisis CSV (RFC 4180)
RFC 4180 es el documento más cercano a un estándar oficial de CSV. Reglas básicas:
- Los campos se separan por comas
- Cada registro termina con CRLF (
\r\n), aunque la mayoría de los analizadores también aceptan LF (\n) - Los campos pueden estar entrecomillados; si lo están, el carácter de comilla doble se escapa duplicandolo (
"") - El primer registro puede ser una fila de encabezado con los nombres de las columnas
- Todos los registros deben tener el mismo número de campos (aunque los analizadores varian en cuan estrictamente lo aplican)
Un CSV compatible con RFC 4180 con campos entrecomillados y comas incrustadas:
id,description,tags
1,"Converts JSON, YAML, and CSV","data,tools"
2,"Supports ""quoted"" values","parsing"
La segunda columna de la fila 1 contiene una coma. La tercera columna contiene una coma. Ambas son válidas porque los campos están entrecomillados. Las comillas dobles en la descripción de la fila 2 representan una sola comilla literal.
Inferencia de Tipos
Los campos CSV siempre son strings a nivel de formato. Un convertidor que produce JSON con tipos infiere en este orden:
"42" -> 42 (entero válido)
"3.14" -> 3.14 (float válido)
"true" -> true (booleano literal)
"false" -> false (booleano literal)
"" -> null (vacio)
"texto" -> "texto" (permanece como string)
La mayoría de los convertidores distinguen entre mayusculas y minusculas para booleanos. True con mayuscula inicial puede convertirse en string en lugar de booleano. Algunos convertidores también intentan detectar números en notación científica, fechas ISO 8601 o strings vacios vs nulos explicitos.