Zum Inhalt springen

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

  1. 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.
  2. Lies die erzeugten Tabellen: Die Wurzel heißt generic, Kindtabellen heißen generic_<key> und sind über Fremdschlüssel generic_id verknüpft.
  3. 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.

Spezifikationen und Referenzen