Italiano

Dati e fogli di calcolo · CSV Pulitore

Conversione tra CSV e JSON: forme, tipi e cosa si perde

· Come funziona

csv json formati di dati

Una griglia CSV rettangolare che diventa una riga di oggetti piatti JSON mentre ogni valore rimane testo
Illustrazione vettoriale originale ToolAcre

CSV è testo semplice e JSON è dati tipizzati nidificati, quindi la conversione tra di essi implica decisioni. Questo post spiega le forme JSON comuni per i dati tabulari, come i tipi vengono dedotti o meno e cosa non può sopravvivere al viaggio di andata e ritorno.

Un API vuole JSON, l'esportazione è CSV e ogni numero arriva come stringa: perché i due formati non sono d'accordo sui tipi

L'esportazione di un foglio di calcolo può mostrare 42 senza dire se tali caratteri significano un conteggio, un codice prodotto o un identificatore. JSON può distinguere un numero da una stringa, ma l'origine CSV non può fornire tale distinzione. ToolAcre sceglie quindi la rappresentazione conservativa: ogni cella diventa una stringa JSON, comprendente cifre, parole realistiche e celle vuote.

Questa decisione mantiene intatto il testo come 0012 e rende la conversione prevedibile per un'integrazione API. Significa anche che il codice downstream deve eseguire il cast dei campi secondo il proprio schema prima di eseguire operazioni aritmetiche. Trattare il file generato come già digitato sposta semplicemente un'ipotesi dal convertitore al codice dell'applicazione meno visibile.

La solita forma di destinazione: una serie di oggetti chiave per intestazione e perché quindi le intestazioni devono essere pulite e univoche

La rotta produce un array di primo livello con un oggetto per ogni riga di dati. Le celle di intestazione diventano chiavi oggetto e i valori vengono presi dalle stesse posizioni di colonna. Una terza intestazione vuota diventa colonna_3, mentre una seconda intestazione denominata id diventa id_2 invece di sovrascrivere il primo campo id.

I nomi chiari e univoci sono utili, ma il convertitore non minuscolo, traslittera o sostituisce gli spazi. Taglia un'intestazione solo durante il calcolo della chiave, quindi inventa un nome posizionale o un suffisso numerico dove necessario. Se API richiede customer_email anziché Customer Email, rinominare deliberatamente la colonna prima di fare affidamento sul contratto di output.

Forme alternative: array di array e oggetti orientati alle colonne e quando ciascuno di essi è più adatto

Lo schema proponeva matrici di matrici e oggetti orientati alle colonne come obiettivi selezionabili. Sono progetti di dati ragionevoli, ma questa interfaccia non li offre. Il suo output è sempre un array JSON di record flat digitati dalla prima riga CSV, rientrati con due spazi per un'ispezione leggibile.

Questa scelta ristretta rimuove l'ambiguità su dove risiede il nome di una colonna e mantiene ogni record con la stessa forma. Se un altro consumatore prevede array, trasforma JSON scaricato nello schema di quel consumatore. Affermare che ToolAcre sceglie tra diversi layout descriverebbe controlli e rami che non esistono nella configurazione o nel codice del pannello.

Questo convertitore emette una forma: una serie di oggetti piatti di primo livello

Non si verifica alcuna ipotesi di tipo. Il testo CSV 42 diventa "42", false diventa "false" e uno spazio vuoto diventa "" anziché null. Ciò è esplicito nel record e nell'implementazione dello strumento, che associa le celle direttamente alle proprietà della stringa. Il percorso non controlla una colonna e decide che tutti i valori non vuoti sono numerici.

La conservazione delle stringhe separa inoltre questo articolo dalla discussione pubblicata sulle applicazioni dei fogli di calcolo che modificano gli zeri iniziali, le date e gli identificatori lunghi. Qui il punto è il contratto vero e proprio del trasformatore: esso evita quella classe di coercizione. I consumatori rimangono responsabili dell'analisi delle quantità note e del mantenimento degli identificatori intatti.

I tipi vengono conservati come testo; ToolAcre non esegue alcuna inferenza

Nella direzione opposta, ToolAcre accetta un array JSON di livello superiore i cui elementi sono oggetti. Costruisce colonne dall'unione delle chiavi di ogni oggetto, nell'ordine in cui vengono visualizzate per la prima volta, in modo che un campo introdotto da un record successivo non venga perso. Le proprietà mancanti, nulle e non definite diventano celle CSV vuote.

Un oggetto o un array archiviato all'interno di una proprietà viene serializzato come testo JSON all'interno di quella cella. Ciò preserva una rappresentazione testuale ma non trasforma la struttura nidificata in colonne o righe aggiuntive. Una radice non array e un array contenente valori primitivi vengono rifiutati perché nessuno dei due corrisponde al modello di tabella supportato da questo percorso.

JSON-to-CSV accetta un array di oggetti e scrive valori nidificati come testo JSON

Considera nome,attivo,conteggio seguito da Ada,true,007. Il risultato JSON è un array contenente un oggetto con nome "Ada", attivo "true" e conteggio "007". La conversione di quella matrice di oggetti flat produce le stesse tre celle testuali perché nessuna inferenza sul tipo ha rimosso gli zeri o convertito la parola dall'aspetto booleano.

Ora aggiungi un'intestazione vuota prima di un altro valore. La chiave JSON diventa colonna_4, quindi i dati rimangono raggiungibili anche se manca il nome dell'origine. Tuttavia, aggiungi una cella in più oltre la larghezza dell'intestazione e il caricatore avvisa di una riga irregolare; quella cella in eccesso non ha chiave ed è assente da JSON.

Ciò che non copre: JSON profondamente annidato, convalida dello schema e streaming di documenti JSON molto grandi

Il percorso non è un validatore di schema, un flattener ricorsivo o un processore di streaming JSON. Accetta una forma documentata e segnala JSON non valide o radici non supportate con un errore specifico. I record profondamente annidati necessitano di una mappatura progettata attorno al loro dominio piuttosto che di una promessa automatica che la punteggiatura in una chiave crei la struttura.

Il controllo del file di input consente file fino al 50 MB configurato e l'analisi CSV avviene in un lavoratore. Questi fatti non stabiliscono lo streaming: il testo del file e le righe completate vengono comunque materializzate per la conversione. Per flussi di lavoro JSON molto grandi, utilizzare un sistema la cui implementazione documenti esplicitamente l'analisi incrementale anziché dedurla qui.

La convalida dello schema, gli array primitivi e le radici non array non rientrano nella forma accettata

La conversione è un insieme visibile di scelte: prima riga come chiavi, oggetti flat come record e stringhe come valori. ToolAcre rende queste scelte stabili invece di indovinare da un campione. Le intestazioni vuote e ripetute ricevono chiavi deterministiche, mentre l'input irregolare viene alla luce prima che un plusvalore senza nome possa scomparire inosservato.

Utilizza l'anteprima per confermare il delimitatore e la forma della riga, risolvere gli avvisi, quindi scaricare o copiare JSON. Il file risultante è adatto per il codice che conosce il proprio schema. Non è intenzionalmente un sostituto di quello schema e la sua limitazione è ciò che protegge gli ID testuali durante il cambio di formato.