Ausgewählte Json Einträge in "" automatisiert in MySQL-Tabellen umwandeln?

Merxer

Benutzer
Beiträge
6
Hallo...

Also ich bin noch ein relativer Anfänger und wollte mal wissen ob Folgendes klappt:

Ich hab hier eine .json Datei mit sagen wir ein paar 1000 Einträgen als Text in Tabellenstruktur. Das sieht z.b in jeder Zeile so aus: "id":"14356","title":"NameBla1","user":"Max". Also immer Prefixe jeweils in "", mit entsprechender Benennung nach : und durch, getrennt. Mein Ziel ist es nun nicht die kompletten Zeilen zu kopieren sondern z.b nur einzelne Einträge daraus wie "id" oder "user" (mit dem was je hinter dem Doppelpunkt in "" steht) herauszufiltern und aus den Spalten eine separate MySQL Tabelle mit entsprechenden Einträgen zu erzeugen.

Meine Frage: Geht das irgendwie und falls ja wie mach ich das am Besten? (Script? Konsolebefehl?)
 
Werbung:
Welche MySQL Version hast du drauf ?

Gib mal
Code:
SELECT VERSION();

in PhpMyAdmin ein und poste das Ergebnis.

Sollte je nach Version kein Problem sein mit deinen Daten.

Gruß

Bernd
 
Dann würde ich sagen, ja, das ist möglich. Du importierst dir die Datei in eine Tabelle mit JSON-Datentypen und nutzt entsprechende Funktionen in deiner Abfrage.
JSON ist sehr mächtig, aber nicht unbedingt einfach :)
 
So, wenn deine Daten so aussehen, kannst du diese direkt hier reinkopieren,
dort wo meine 2 JSON Zeilen stehen.

Dann kannst du ganz normal mit select where oder sonst was arbeiten.

oder du legst eine entsprechende Tabelle an ud setzt ein INSERT INTO neueTabell vor mein query,
dann sind die Daten direkt in einer Tabelle


Code:
SELECT *
FROM JSON_TABLE( '[
 
  {"id":"14356","title":"NameBla1","user":"Max"} ,
  {"id":"9876","title":"Bernd","user":"BB"}
 
]', "$[*]" COLUMNS(
 rowid FOR ORDINALITY,
 id INT  PATH "$.id",
 title VARCHAR(100) PATH "$.title" DEFAULT '' ON EMPTY DEFAULT 'XXX' ON ERROR,
 user VARCHAR(100) PATH "$.user" DEFAULT '' ON EMPTY DEFAULT 'XXX' ON ERROR
 )
) as jt;

BeispielHier noch ein Beispiel dazu

Gruß Bernd
 
So, wenn deine Daten so aussehen, kannst du diese direkt hier reinkopieren,
dort wo meine 2 JSON Zeilen stehen.

Dann kannst du ganz normal mit select where oder sonst was arbeiten.

oder du legst eine entsprechende Tabelle an ud setzt ein INSERT INTO neueTabell vor mein query,
dann sind die Daten direkt in einer Tabelle


Code:
SELECT *
FROM JSON_TABLE( '[
 
  {"id":"14356","title":"NameBla1","user":"Max"} ,
  {"id":"9876","title":"Bernd","user":"BB"}
 
]', "$[*]" COLUMNS(
 rowid FOR ORDINALITY,
 id INT  PATH "$.id",
 title VARCHAR(100) PATH "$.title" DEFAULT '' ON EMPTY DEFAULT 'XXX' ON ERROR,
 user VARCHAR(100) PATH "$.user" DEFAULT '' ON EMPTY DEFAULT 'XXX' ON ERROR
 )
) as jt;

BeispielHier noch ein Beispiel dazu

Gruß Bernd
Ok das scheint schonmal in die richtige Richtung zu gehen.... Einziges Problem: Kann man das auch anders ausgeben? In meiner .json fehlen die "," am Ende jeder Zeile. (und das ein paar zigtausend mal), sonst könnt ich das jetzt einfach in mein PMA reinkopieren?

Fehlermeldung: Invalid JSON text in argument 1 to function json_table: "Missing a comma or ']' after an array element

edit: Hab das Kommaproblem gelöst...
 
Zuletzt bearbeitet:
wenn du linux hast ist das ein einzeiler:
Code:
cat deineDatei | sed 's/}/},/' >neueDatei

in der neuen datei muss du nur noch ganz am ende das letze komma entfernen und los gehts

Bernd
 
Ok mit der 'Ersetzen' Funktion in Notepad geht es zwar auch. Allerdings grade gemerkt, dass es (bei der großen Zahl von Einträgen) nur Notepad zum Abstürzen bringt. Probier's mal damit...
 
Werbung:
Zurück
Oben