Italiano

Strumenti per sviluppatori · Convertitori di sintassi

da CSV a JSON e da JSON a CSV: intestazioni, valori stringa e appiattimento

· Come funziona

json csv formati di dati

Un albero JSON nidificato che si appiattisce in un modo in colonne CSV tratteggiate
Illustrazione vettoriale originale ToolAcre

CSV è piatto, senza tipo e ambiguo riguardo al proprio delimitatore, mentre JSON è nidificato e digitato. Questo post mostra come un convertitore mappa le righe sugli oggetti e viceversa e dove le informazioni vengono perse in ciascuna direzione.

Ogni numero è tornato tra virgolette: l'esportazione CSV è stata convertita in JSON dove 42 è diventato "42" e il codice ZIP ha mantenuto lo zero iniziale per una volta

La cartella di lavoro richiede esempi da CSV-a-JSON, ma ToolAcre non legge mai CSV. Il motore pubblicizza esattamente nove coppie dirette e nessuna inizia con CSV. La lettura di un file richiederebbe scelte su delimitatore, virgolette, presenza di intestazione e tipi di celle; questo pannello si rifiuta di fare quattro ipotesi silenziose. L'articolo corretto documenta quindi la direzione JSON-to-CSV spedita.

Questa decisione unidirezionale è visibile sia nell'interfaccia che negli errori. CSV appare come una destinazione, non come una fonte, e tentare il contrario restituisce `UNSUPPORTED_CONVERSION` con il consiglio di utilizzare uno strumento che chiede informazioni su dialetto e tipi. Un titolo che suggerisce entrambe le direzioni rappresenterebbe in modo errato il prodotto anche se l'argomento generale fosse comune altrove.

CSV non viene letto qui: inizia con il percorso JSON-to-CSV lo strumento viene effettivamente fornito

Un array root JSON fornisce le righe. Un oggetto semplice diventa una riga. Un oggetto la cui unica chiave contiene un array apre quell'array e avverte che ha utilizzato la proprietà denominata. Gli oggetti con chiavi di pari livello aggiuntive non vengono scartati, perché così facendo si scarterebbero o duplicherebbero tali fratelli.

Ogni record selezionato viene appiattito prima che le colonne vengano raccolte. I record possono anche essere scalari all'interno di un array; quelli usano una colonna `value`. Uno scalare semplice alla radice del documento viene rifiutato perché una stringa o un numero non definisce una tabella con record e campi.

Scelta dei record da JSON: array, oggetti singoli e wrapper di array a una chiave

I tipi JSON sopravvivono solo come testo di cella. I valori booleani diventano `true` e `false`, i numeri utilizzano il rendering decimale e null diventa una cella vuota. CSV non è in grado di distinguere il valore null dalla stringa vuota, quindi lo scrittore conta i valori null e avverte dell'ambiguità anziché chiamare il risultato equivalente.

Gli interi wide sono già soggetti all'analisi JSON prima di questa fase, quindi un valore letterale numerico non sicuro potrebbe aver perso precisione. Mettere un identificatore tra virgolette ne preserva il testo. Le stringhe simili a formule ricevono un apostrofo aggiuntivo per impostazione predefinita quando iniziano con `=`, `+`, `-`, `@`, tabulazione o ritorno a capo; il numero effettivo `-5` rimane un numero e non ha un prefisso.

Perché l'output CSV non può preservare i tipi JSON

Le colonne sono l'unione di chiavi appiattite nell'ordine di visualizzazione. Se una riga ha `a` e un'altra ha `b`, l'output avrà entrambe le colonne e riempirà ogni campo mancante con una cella vuota. Un avviso segnala righe irregolari anziché spostare i valori sotto le intestazioni errate.

L'ordinamento delle chiavi degli oggetti non viene applicato a CSV; la regola dello scrittore è la prima apparizione nei documenti. Ciò rende stabile un esempio per un input JSON fisso, ma non è un contratto di schema. Disporre deliberatamente le chiavi di origine o postelaborare l'intestazione quando un'importazione downstream richiede un ordine prescritto.

Appiattimento di dati nidificati: percorsi di punti come address.city, matrici come colonne indicizzate o stringhe unite e il punto in cui CSV semplicemente non riesce a mantenere la forma

Le chiavi degli oggetti nidificati si uniscono con un punto: `address.city`. Le matrici utilizzano lo stesso separatore e gli stessi indici numerici: `tags.0`, `tags.1`. Gli oggetti e gli array vuoti mantengono una cella vuota nel proprio percorso invece di scomparire. Ciò produce un rettangolo pur ammettendo che un albero sia stato proiettato nei nomi.

Una chiave di origine che contiene già un punto è ambigua con un percorso nidificato. ToolAcre rileva e avvisa ma non inventa una sintassi di escape che i fogli di calcolo non potrebbero comprendere. Gli array profondi o lunghi possono anche superare il limite della colonna 2,000, dove la conversione rifiuta anziché emettere una tabella che i normali software per fogli di calcolo non possono utilizzare.

Esempio funzionale: un elenco di clienti in entrambe le direzioni: da CSV a JSON, modificando un campo nidificato e da JSON di nuovo a CSV con la nidificazione appiattita

Utilizza `[ {"id":"0042","address":{"city":"Oslo"},"tags":["new","west"],"note":"=1+1"}, {"id":"0043","address":{"city":"Lima"},"tags":[],"note":null} ]`. Le intestazioni includono ID, address.city, tag.0, tag.1 e nota. La seconda riga riceve spazi per gli indici dei tag assenti e la sua nota nulla è indistinguibile dal testo vuoto.

La prima nota è preceduta da un apostrofo, quindi un foglio di calcolo la tratta come testo. I record terminano con CRLF, i campi contenenti delimitatore, virgoletta o fine riga sono racchiusi tra virgolette doppie e le virgolette incorporate sono raddoppiate. Selezionando il punto e virgola o la tabulazione si modifica il delimitatore; è possibile aggiungere un UTF-8 BOM opzionale per i consumatori che ne hanno bisogno.

Esempio realizzato: un array di clienti nidificato appiattito una volta in CSV

CSV con formato non valido o codificato in modo ambiguo è esterno a questo percorso perché nessun CSV vi entra. CSV Cleaner è il luogo in cui scegliere o rilevare il dialetto e riparare le citazioni. Qui l'origine è rigorosa JSON e l'output segue le convenzioni dello scrittore documentato.

Il convertitore limita inoltre l'output alle righe 100,000 e alle colonne 2,000. Gli array vuoti vengono rifiutati perché un file senza intestazione né riga non ha la forma di tabella. Tali limiti sono percorsi di codice applicati, non promesse di prestazioni, e l'articolo non inventa dati sulla velocità effettiva.

Conclusione: CSV è una tabella, JSON è un albero e come il pannello dei convertitori di sintassi si sposta tra di loro senza caricare le righe

JSON è un albero tipizzato; CSV è una tabella di testo. ToolAcre sceglie righe, appiattisce percorsi, unisce colonne, virgolette campi e neutralizza testo pericoloso, ma non può preservare null-versus-empty o ricostruire la nidificazione in un secondo momento. Tali perdite sono strutturali piuttosto che rumore di formattazione.

Utilizzare questa direzione quando l'output desiderato è l'output sotto forma di foglio di calcolo. Se hai bisogno di CSV-to-JSON, scegli un lettore che chieda delimitatore, intestazione e tipi. Rifiutare il contrario è più sicuro che restituire un JSON convincente costruito sulla base di ipotesi non riviste.