A Saída JSON
Converter o CSV de exemplo produz:
[
{
"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
}
]
Regras de Parsing CSV (RFC 4180)
- Campos são separados por vírgulas
- Cada registro termina com CRLF (
\r\n), mas a maioria dos parsers também aceita LF (\n) - Campos podem ser envolvidos em aspas duplas; se envolvidos, a aspa dupla dentro é escapada dobrando (
"") - O primeiro registro pode ser uma linha de cabeçalho com nomês de coluna
- Todos os registros devem ter o mêsmo número de campos
Um CSV compatível com campos entre aspas e vírgulas embutidas:
id,description,tags
1,"Converts JSON, YAML, and CSV","data,tools"
2,"Supports ""quoted"" values","parsing"
Inferência de Tipos
Campos CSV são sempre strings no nível do formato. Um conversor que produz JSON tipado aplica inferência:
"42" -> 42 (inteiro válido)
"3.14" -> 3.14 (float válido)
"true" -> true (literal booleano)
"false" -> false (literal booleano)
"" -> null (campo vazio)
"hello" -> "hello" (permanece string)
Issó produz resultados incorretos para:
- CEPs e números de telefone com zeros à esquerda (
07302vira7302) - Inteiros grandes além do intervalo seguro do JavaScript (perda de precisão acima de 2^53)
- Valores de notação científica que você quer como strings (
1e5virando100000)
Alternativas CLI
csvjson (parte do csvkit)
pip install csvkit
csvjson data.csv > data.json
Python standard library
import csv
import json
with open("data.csv") as f:
reader = csv.DictReader(f)
data = list(reader)
print(json.dumps(data, indent=2))
Casos Extremos
Caracteres BOM
Excel no Windows exporta arquivos CSV com BOM UTF-8. Se sua primeira chave é \ufefffirst_name em vez de first_name, remova o BOM antes de processar:
with open("data.csv", encoding="utf-8-sig") as f:
reader = csv.DictReader(f)
Contagens de Coluna Inconsistentes
Quando uma linha tem menos colunas que o cabeçalho, as chaves ausentes recebem null ou são omitidas dependendo do parser.
Quebras de Linha Diferentes
Arquivos CSV do Windows usam CRLF (\r\n). Arquivos Unix/Mac usam LF (\n). Alguns parsers tratam o \r como parte do valor do último campo.