webentwicklung-frage-antwort-db.com.de

JSON in MySQL importieren

das Problem, mit dem ich konfrontiert bin, ist das Importieren von JSON in MySQL. Ich habe die Interwebs durchsucht, ich habe stackoverflow und wahrscheinlich noch mehr Quellen gesucht, konnte aber keine einzige proper -Lösung finden. Vollständige Offenlegung hier - Ich bin kein PHP, SQL oder JSON-Profi. 

Was ich zu erreichen versuche, ist ziemlich einfach: Importieren Sie diese JSON-Datei https://developers.facebook.com/tools/Explorer/method=GET&path=245226895508982%2Ffeed%3Faccess_token%3D%3Caccess_token%3E= in eine Mysql-Datenbank . Ich verstehe, dass ich so die JSON-Daten irgendwie in Spalten zuordnen muss und dann die Zeilen entsprechend mit dem Inhalt kuratieren muss. Ich brauche nicht alle Daten, aber das meiste davon. Die Daten sollten später durch eine Suchanfrage eines Benutzers bestätigt werden.

Meine Frage ist ziemlich einfach - wie kann ich das machen?

P.S: Ich habe versucht, es in XML zu konvertieren, aber ich habe nicht die erforderlichen Rechte, um XML in die SQL-Datenbank zu importieren. Auch der Konverter hat nicht den besten Job gemacht.

11
John

Sie können Ihren Json nach csv exportieren: http://www.danmandle.com/blog/json-to-csv-conversion-utility/ oder https://github.com/danmandle/JSON2CSV

Dann : 

LOAD DATA INFILE 'filepath/your_csv_file.csv' INTO TABLE tablename;

Es sollte in Ordnung sein, wenn Sie ein Foto machen.

Weitere Informationen zum Laden von Daten .

10
kmas

Wie andere schon gesagt haben, müssen Sie ein wenig konvertieren, um das zu tun, was Sie wollen. Glücklicherweise ist es nicht zu schwierig, PHP durch die Daten zu iterieren und die meiste Arbeit für Sie zu erledigen. Hier ist ein schneller und schmutziger Versuch:

// MySQL table's name
$tableName = 'my_table';
// Get JSON file and decode contents into PHP arrays/values
$jsonFile = '/path/to/file.json';
$jsonData = json_decode(file_get_contents($jsonFile), true);

// Iterate through JSON and build INSERT statements
foreach ($jsonData as $id=>$row) {
    $insertPairs = array();
    foreach ($row as $key=>$val) {
        $insertPairs[addslashes($key)] = addslashes($val);
    }
    $insertKeys = '`' . implode('`,`', array_keys($insertPairs)) . '`';
    $insertVals = '"' . implode('","', array_values($insertPairs)) . '"';

    echo "INSERT INTO `{$tableName}` ({$insertKeys}) VALUES ({$insertVals});" . "\n";
}

Dies spuckt eine Reihe vonINSERT INTO my_table (...) VALUES (...) aus;SQL-Anweisungen, die Sie in einer .sql-Datei speichern und in MySQL importieren können. Bei dieser Methode kann jedes INSERT unterschiedliche Spalten haben, ohne Probleme zu verursachen.

Hinweis: Mit addslashes () ist dies nicht sehr sicher. Etwas wie real_escape_string () wäre vorzuziehen. Dies funktioniert jedoch ohne DB-Verbindung, sofern Ihre JSON-Daten vertrauenswürdig sind.

5
smashuu

Mit MySQL Shell 8.0.13 können Sie JSON-Dokumente mithilfe der util.importJson-Shell-API-Funktion oder der Befehlszeilenoption --import direkt in MySQL Server importieren. Zum Beispiel Import aus Datei:

mysqlsh [email protected]:port/database --import /tmp/facebook.json collection_name

oder JSON-Dokument an stdin weiterleiten:

cat /tmp/facebook.json | mysqlsh [email protected]:port/database --import - collection_name

wobei collection_name eine collection ist.

Weitere Informationen zum JSON-Import-Dienstprogramm von MySQL Shell: https://dev.mysql.com/doc/mysql-Shell/8.0/en/mysql-Shell-utilities-json.html

Weitere Informationen zum Dokumentenspeicher: https://dev.mysql.com/doc/refman/8.0/en/document-store.html

Weitere Informationen zu Dokumenten und Sammlungen: https://dev.mysql.com/doc/refman/8.0/de/mysql-Shell-tutorial-javascript-documents-collections.html

1
kgr

Ich weiß, dass dieser Beitrag ziemlich alt ist, ich wollte jedoch antworten.

Ich war auf dieses Bedürfnis gestoßen und baute eine individuelle Lösung auf.

Ich benötigte zusätzliche Funktionen, die über das hinausgehen, was mit https://sqlizer.io/#/ verfügbar ist.

Im Grunde brauchte ich es, um Eltern-Kind-Beziehungstabellen mit Fremdschlüssel-IDs zu erstellen. 

Ich habe Python benutzt. Ich habe ein mehrdimensionales Array verwendet, die Schlüsselwerte darin gespeichert, den Objekttyp in den Werten untersucht und, wenn es ein Diktyp war, das ganze Ding rekursiv aufrufen, um ein anderes mehrdimensionales Array zu erstellen, mit dem es verbunden wird die übergeordnete Tabelle.

War keine leichte Aufgabe, dauerte über eine Woche zu bauen und zu testen. Jetzt habe ich jedoch ein Dienstprogramm, auf das ich höchstens REST - APIs verweisen kann, die in JSON antworten und das Ergebnis automatisch in einer gut formatierten Tabelle direkt in MySQL speichern.

Ich weiß, dass es ein alter Beitrag ist, aber vielleicht kann es jemandem helfen ... Ich wollte in MySQL dieselbe Datenbank erstellen, wie ich sie in MongoDb habe.

Ich habe eine gültige Json-Datei mit Daten (keine Struktur), dann habe ich in MySQL eine Tabelle mit der entsprechenden Struktur (entsprechend den Json-Daten) erstellt und diese über MySQL-Workbench importiert.

Hier ist das Beispiel mit csv, aber Sie können Ihre Json-Datei laden. __ Folgen Sie einfach dem Assistenten zum Importieren von Daten in die Tabelle und stellen Sie sicher, dass die Struktur gültig ist. Andernfalls wird nichts importiert.

0
Angel M.