JSON in ein MySQL-Schema umwandeln — Numio
Erzeugt aus Beispiel-JSON MySQL-CREATE-TABLE-Anweisungen. Die Wurzel wird zu einer Tabelle namens generic; jedes verschachtelte Objekt oder Array wird zu einer Kindtabelle mit einem Fremdschlüssel auf den Primärschlüssel der Elterntabelle.
Ein normalisiertes Tabellenlayout für einen API-Payload skizzieren, bevor du eine echte Migration schreibst.
JSON
MySQL Schema
Wann sie hilft
- Ein normalisiertes Tabellenlayout für einen API-Payload skizzieren, bevor du eine echte Migration schreibst.
- Beim Umzug von Daten aus einem Document Store nach MySQL sehen, welche verschachtelten Objekte und Arrays eines Dokuments eigene Tabellen bräuchten.
Anwendung
- Füge ein JSON-Objekt oder ein Array von Beispieldatensätzen, die zu einer Tabelle zusammengeführt werden, in den linken Editor ein oder öffne über die Schaltfläche zum Laden einer Datei eine UTF-8-Datei.
- Lies die erzeugten Tabellen: Die Wurzel heißt generic, Kindtabellen heißen generic_<key> und sind über Fremdschlüssel generic_id verknüpft.
- Kopiere das SQL und benenne vor dem Ausführen Tabellen um und passe Spaltentypen an (z. B. DECIMAL für Preise oder VARCHAR-Längen).
JSON-Beispielobjekt
{
"id": 1024,
"total": 19.5,
"coupon": null,
"created_at": "2026-01-05T10:00:00Z",
"scores": [4, 4.5],
"items": [{ "sku": "A1", "qty": 2 }]
}MySQL-CREATE-TABLE-Anweisungen
CREATE TABLE generic ( id INT, total DOUBLE, coupon TEXT, created_at TIMESTAMP, PRIMARY KEY (id) ); CREATE TABLE generic_scores ( generic_id INT, id INT, value DOUBLE, PRIMARY KEY (id), FOREIGN KEY (generic_id) REFERENCES generic(id) ); CREATE TABLE generic_items ( generic_id INT, id INT, sku TEXT, qty INT, PRIMARY KEY (id), FOREIGN KEY (generic_id) REFERENCES generic(id) );
Details und Einschränkungen
Ganzzahlen werden zu INT (BIGINT außerhalb des 32-Bit-Bereichs), andere Zahlen zu DOUBLE, Strings zu TEXT und Booleans zu BOOLEAN. VARCHAR-Längen, NOT NULL, AUTO_INCREMENT oder Indizes werden nicht erzeugt.
Primärschlüssel ist ein Schlüssel namens id oder einer, der _id enthält; gibt es keinen, wird eine Spalte id hinzugefügt. Strings mit mehr als 18 Zeichen, die sich als Datum parsen lassen, werden zu TIMESTAMP.
null-Werte werden zu TEXT-Spalten. Arrays aus skalaren Werten erhalten eine Kindtabelle mit einer Spalte value, deren Typ aus allen Elementen bestimmt wird (scores oben ist DOUBLE).
Läuft im Browser; die Ausgabe wird nicht gegen einen MySQL-Server validiert.
FAQ
Warum hat ein Dezimalwert den Typ DOUBLE statt DECIMAL?
Das Beispiel kann die benötigte Genauigkeit nicht zeigen, daher werden nicht ganzzahlige Zahlen zu DOUBLE. Ändere Geldbetrags-Spalten von Hand in DECIMAL(p,s).
Kann ich den Tabellennamen wählen?
Nein. Die Root-Tabelle heißt immer generic, Kindtabellen heißen generic_<key>. Benenne sie im kopierten SQL um.
Werden INSERT-Anweisungen erzeugt?
Nein, nur CREATE TABLE. Um JSON-Zeilen in INSERT-Anweisungen umzuwandeln, nutze das Tool JSON to SQL.