Convertire JSON in SQL

Qui converti JSON in SQL gratis e senza account: trascina il file qui sopra e in un paio di secondi il risultato è pronto da scaricare. La conversione avviene dentro il tuo browser, quindi il file non viene mai caricato. Funziona allo stesso modo su Windows, macOS e Linux e anche su iPhone e Android, e continua a funzionare anche se stacchi la connessione.

  • Dove gira Nel tuo browser. Il file non viene mai caricato.
  • Ricostruito SQL funziona in modo diverso da JSON. Non è quindi il degrado graduale di un codec con perdita: quello che SQL sa esprimere viene riprodotto fedelmente, e quello che lì non ha un equivalente non sopravvive affatto.
  • Limite di dimensione Fino a 100 MB per file, gratis e senza account.
  • Vale la pena saperlo Gli oggetti annidati vengono appiattiti in colonne. I dati molto annidati perdono la loro forma.

Fino a 100 file alla volta. Formati diversi insieme non sono un problema.

Si ottengono le righe, e la tabella la si scrive da soli

L’output è una serie di istruzioni INSERT e nient’altro. È un limite deliberato invece di una funzionalità mancante. JSON dice che un valore è un numero; non dice se la colonna è un intero o un decimale con due posti, se è nullable, quale campo è la chiave primaria, quali sono le chiavi esterne, o quanto può essere lungo il testo. Quelle sono le decisioni che uno schema esiste per registrare, e un convertitore che le indovinasse produrrebbe un CREATE TABLE che andrebbe letto riga per riga prima di fidarsi, che è più lavoro che scriverlo.

Ciò che significa in pratica è che la tabella esiste già prima di eseguire il file. Convertire una volta, leggere l’elenco delle colonne dalla prima istruzione, scrivere il DDL perché corrisponda, poi eseguire. È un ciclo di due minuti e mette le decisioni di schema dove devono stare, in una migrazione che si può rivedere, invece di in un file generato che per caso funziona sul primo campione, ed è il ciclo che fa risparmiare debug dopo.

Il nome del file diventa il nome della tabella

Non c’è altro posto da cui potrebbe venire. Un documento JSON non ha un nome per sé, quindi lo fornisce il file caricato: ordini.json produce INSERT INTO ordini, ed esportazione-2024.json produce INSERT INTO esportazione_2024, perché un trattino non è legale in un identificatore non quotato e una cifra iniziale non lo è.

La conseguenza è che rinominare il file prima di convertire è il modo più economico per controllare l’output. Farlo dopo significa una ricerca e sostituzione attraverso ogni istruzione nel file, e la sostituzione deve stare attenta a non colpire un valore che contiene la stessa parola. Trentina secondi in un file browser battono un’espressione regolare su centomila righe, ed è il tipo di scelta che si fa una volta e si dimentica.

L’annidamento diventa nomi di colonna con underscore

Una tabella relazionale è piatta e JSON non lo è, quindi un oggetto annidato è appiattito nel nome della colonna: un record con un oggetto cliente che contiene una città produce una colonna chiamata cliente_città. Il percorso è conservato, il punto diventa un underscore perché un punto non è legale in un identificatore, e nulla è scartato.

Un livello di annidamento produce una tabella che chiunque sarebbe felice di dichiarare. Due è di solito ancora ragionevole. Oltre, l’elenco di colonne generato è un segnale invece di un risultato: una struttura JSON a quattro livelli sta descrivendo relazioni, e lo schema che le si adatta sono diverse tabelle con chiavi fra loro. Caricare tutto in una tabella larga funziona e rende ogni query successiva più difficile di quanto dovesse essere, ed è il tipo di scelta di design che si paga per anni.

Gli array diventano colonne numerate, che è quasi mai lo schema che si vuole

Un record con tre tag produce tag_0, tag_1 e tag_2. Ogni valore sopravvive e la forma è sbagliata in un modo che peggiora: il record successivo con cinque tag allarga la tabella di altre due colonne, e non c’è una query sensata su «il secondo tag».

Un database relazionale ha una risposta normale a questo, ed è una seconda tabella, una riga per tag, con l’identificativo del genitore accanto. Arrivarci da un’esportazione JSON significa convertire due volte con l’array estratto nel mezzo, o caricare la tabella larga come passaggio di staging e normalizzare con una query. Entrambe sono più lavoro di una singola conversione, ed entrambe producono uno schema che si può effettivamente interrogare. Se il database di destinazione ha un tipo di colonna JSON nativo, memorizzare l’array in una colonna è la terza opzione, ed è quella adatta quando l’array è trasportato invece che interrogato.

Ogni istruzione nomina le stesse colonne

I record JSON in un’esportazione non sono obbligati ad essere d’accordo. Un’API omette i campi che non hanno valore, quindi mille record possono presentare una dozzina di insiemi di chiavi diversi. La conversione li riconcilia raccogliendo l’unione di ogni chiave nel file e scrivendo NULL dove un record non ha nulla.

Quell’uniformità è ciò che rende l’output sicuro da eseguire come batch: l’elenco delle colonne è identico in ogni istruzione, quindi una tabella che accetta la prima riga le accetta tutte. Spiega anche una differenza che si nota, convertire dieci record per un test produce meno colonne che convertendo l’intero file, perché il campione non conteneva i campi più rari. Scrivere il DDL da una conversione dell’intero file, mai da un campione, ed è una regola che vale la pena scrivere nel runbook del progetto.

Come sono scritti i valori, e il backslash da conoscere

I numeri sono scritti nudi, i booleani come TRUE e FALSE, un null JSON come NULL, e tutto il resto come stringa tra virgolette singole con le virgolette singole interne raddoppiate. Raddoppiare è la forma SQL standard ed è ciò che ogni motore capisce, quindi un cognome come O’Brien si carica correttamente ovunque.

I backslash sono scritti direttamente, il che è corretto sotto lo standard e non è come MySQL legge una stringa per impostazione predefinita: lì un backslash inizia una sequenza di escape a meno che NO_BACKSLASH_ESCAPES non sia impostato. Dati che contengono percorsi Windows, espressioni regolari o LaTeX verranno quindi caricati diversamente in MySQL rispetto a Postgres. Se questo descrive l’esportazione, impostare la modalità per la sessione prima di eseguire il file, e controllare una riga coinvolta dopo invece di presumere, ed è il tipo di controllo che costa poco e previene grattacapi grossi.

Gli identificativi mantengono la forma che il JSON gli ha dato

Questo è dove una sorgente JSON è migliore di una delimitata. Un codice prodotto «007» è una stringa JSON, quindi viene scritto come una stringa SQL quotata e arriva nel database con i suoi zeri iniziali. Un CSV degli stessi dati non ha tipi affatto, e ogni strumento nella catena ha la possibilità di decidere che 007 è il numero sette.

La stessa protezione copre gli identificativi numerici lunghi che sono stati esportati come stringhe. Dove sono stati esportati come numeri JSON, però, vale il solito tetto in virgola mobile: qualsiasi cosa oltre le sedici cifre ha già perso precisione prima che questa conversione veda il file, e nessuna attenzione da parte dello scrittore può rimetterla. Se l’esportazione è nostra da modellare, esportare gli identificativi come stringhe è la soluzione, ed è una soluzione alla fonte invece che qui, ed è una distinzione che fa risparmiare ore di debug più tardi.

Eseguire il file: batching, transazioni e dialetto

L’output è un’istruzione per record senza wrapper di transazione e senza VALUES multi-riga. Eseguire cinquantamila istruzioni separate attraverso un client è lento, perché ognuna è un round trip. Racchiudere l’intero file in BEGIN e COMMIT è una riga a ciascuna estremità e di solito il più grande miglioramento singolo disponibile.

Le istruzioni stesse sono deliberatamente semplici e portabili: nessuna virgoletta specifica del motore, nessuna clausola ON CONFLICT, nessun prefisso di schema. Aggiungere ciò che il motore vuole è una ricerca e sostituzione su INSERT INTO, un nome di schema, un ON CONFLICT DO NOTHING per un carico rieseguibile, e partire dalla forma più semplice possibile è ciò che rende quelle modifiche prevedibili, ed è il tipo di base che rende il file riusabile invece che usa e getta.

Quando un caricatore di massa batte un file di istruzioni

Per un file di seed, un fixture, o qualche migliaio di righe, le istruzioni sono la forma comoda: sono leggibili, si possono committare in un repository, ed eseguono ovunque un client possa connettersi. È il lavoro per cui questa pagina è scritta, e vale la pena dirlo perché il confine si attraversa in fretta.

Oltre una certa dimensione l’aritmetica cambia. Ogni motore ha un percorso di massa, COPY in Postgres, LOAD DATA in MySQL, un import in uno strumento client, che legge un file delimitato molto più velocemente di quanto esegua insert individuali, e per un carico di un milione di righe la differenza è minuti contro ore. Convertire la stessa esportazione in CSV o TSV in quel caso, o in NDJSON se la destinazione è un warehouse invece di un database relazionale, ed è il calcolo che vale la pena fare prima di impegnare un’ora in INSERT che il database non apprezza.

I dati non lasciano mai il browser durante il passaggio da JSON a SQL

Le istruzioni sono generate da JavaScript in questa scheda. Niente viene caricato, non c’è account o coda, e il piano gratuito accetta fino a 100 MB, con la memoria come vero tetto perché l’intero documento è analizzato prima che qualcosa sia scritto.

Questo non è un beneficio incidentale per questa coppia. Qualunque cosa stia per essere inserita in un database è, per definizione, un dato che qualcuno ha deciso di conservare, clienti, ordini, transazioni, account. Passarlo attraverso un convertitore di terze parti per vedersi raddoppiare le virgolette sarebbe uno scambio mediocre, e qui non c’è scambio da fare, ed è una di quelle pagine in cui il dettaglio tecnico coincide con il principio.

Come convertire JSON in SQL

  1. Trascina il tuo file JSON su questa pagina, oppure fai clic per sceglierne uno.
  2. Scegli SQL come destinazione. La conversione avviene nel tuo browser e il file non viene caricato.
  3. Scarica il file SQL finito.

JSON o SQL: cosa cambia

JSON a confronto con SQL
JSONSQL
Nome completoJavaScript Object NotationIstruzioni INSERT SQL
Estensione del file.json.sql
Tipo di mediaapplication/jsonapplication/sql
Prima pubblicazione20011986
SpecificaRFC 8259ISO/IEC 9075
LicenzaStandard apertoStandard aperto
Situazione attualeAttualeAttuale
Si apre nel browserTutti i browserNessun browser
Valutato al suo postoXML, YAML, NDJSONCSV, Parquet

Aprire il risultato

Nessun browser legge SQL. È il meno trasportabile dei due: meglio assicurarsi che chi lo riceve lo accetti prima di inviarlo.

I programmi di sempre non coincidono: JSON si apre in Visual Studio Code, jq e Postman, SQL in PostgreSQL, MySQL e DBeaver, quindi chi riceve il risultato ha bisogno di uno del secondo gruppo.

A che cosa serve ciascun formato

JSON è stato pubblicato nel 2001. È descritto in RFC 8259, e vale la pena conoscerlo se il file deve sopravvivere allo strumento che lo ha scritto.

SQL risale al 1986, descritto in ISO/IEC 9075. PostgreSQL, MySQL e DBeaver lo leggono.

SQL è stato pubblicato nel 1986 e JSON nel 2001. Il più vecchio è in genere il file più sicuro da consegnare; il più recente fa lo stesso lavoro con meno byte.

Da JSON a SQL: domande frequenti

Il mio file JSON viene caricato da qualche parte?

No. Questa conversione avviene interamente nel tuo browser, quindi il file non esce dal tuo dispositivo. Puoi controllarlo da solo: apri la scheda di rete degli strumenti per sviluppatori e converti qualcosa. Vedrai la pagina stessa e le richieste di statistica e di pubblicità con cui questo servizio si paga, e nemmeno una che porti il tuo file.

Convertire JSON in SQL è gratis?

Sì. Senza account, senza filigrana e senza una quota giornaliera da consumare: gira sulla tua macchina, quindi puoi tornare quante volte vuoi. Il browser lavora file fino a 100 MB, 100 per volta.

Si perde qualità convertendo JSON in SQL?

JSON e SQL descrivono il contenuto in modi radicalmente diversi. La conversione è quindi una ricostruzione e non una copia: fedele, ma non identica byte per byte. Gli oggetti annidati vengono appiattiti in colonne. I dati molto annidati perdono la loro forma.

Un file SQL si apre nel browser?

Nessun browser legge SQL. È il meno trasportabile dei due: meglio assicurarsi che chi lo riceve lo accetti prima di inviarlo.

Altro su questi formati