web-dev-qa-db-fra.com

Importer JSON dans Mysql

le problème auquel je suis confronté est l'importation de JSON dans Mysql. J'ai cherché dans les interwebs, j'ai recherché stackoverflow et probablement encore plus de sources, mais je n'ai pas pu trouver un seul correct solution. Divulgation complète ici - je ne suis pas un PHP, SQL ni un professionnel JSON.

Ce que j'essaie d'accomplir est assez simple: Importer ce fichier JSON https://developers.facebook.com/tools/Explorer/method=GET&path=245226895508982%2Ffeed%3Faccess_token%3D%3Caccess_token%3E= dans un Base de données Mysql. Je comprends que j’ai besoin d’allouer les données JSON en colonnes d’une manière ou d’une autre, puis de gérer les lignes en conséquence avec le contenu. Je n'ai pas besoin de toutes les données, mais de la plupart. Les données doivent ensuite être répercutées via une requête de recherche d'un utilisateur.

Ma question est assez simple - comment puis-je le faire?

P.S: J'ai essayé de le convertir en XML, mais je n’ai pas les droits suffisants pour importer le XML dans la base de données SQL. De plus, le convertisseur n'a pas fait le meilleur travail.

11
John

Vous pouvez exporter votre fichier json au format csv: http://www.danmandle.com/blog/json-to-csv-conversion-utility/ ou https://github.com/danmandle/JSON2CSV

Ensuite : 

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

Cela devrait aller pour un onehot.

Plus d'infos pour charge data infile .

10
kmas

Comme d’autres l’ont dit, vous allez devoir faire un peu de conversion pour faire ce que vous demandez. Heureusement, il n’est pas trop difficile que PHP parcoure les données et effectue la majeure partie du travail à votre place. Voici une tentative rapide et sale:

// 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";
}

Cela créera une série deINSERT INTO my_table (...) VALUES (...);Instructions SQL que vous pouvez enregistrer dans un fichier .sql et importer dans MySQL. Avec cette méthode, chaque INSERT peut avoir différentes colonnes sans causer de problèmes.

Note: rajouter des barres obliques () n'est pas un moyen très sécurisé de faire cela, et une chose comme real_escape_string () serait préférable, mais cela fonctionne sans connexion à la base de données en supposant que vos données JSON sont fiables.

5
smashuu

Avec MySQL Shell 8.0.13 vous pouvez importer des documents JSON directement sur le serveur MySQL à l’aide de util.importJson fonction API Shell ou option de ligne de commande --import. Par exemple, importer depuis un fichier:

mysqlsh user@Host:port/database --import /tmp/facebook.json collection_name

ou dirigez le document JSON vers stdin:

cat /tmp/facebook.json | mysqlsh user@Host:port/database --import - collection_name

collection_name est un collection .

En savoir plus sur l'utilitaire d'importation JSON de MySQL Shell: https://dev.mysql.com/doc/mysql-Shell/8.0/en/mysql-Shell-utilities-json.html

En savoir plus sur le magasin de documents: https://dev.mysql.com/doc/refman/8.0/en/document-store.html

Pour en savoir plus sur les documents et les collections: https://dev.mysql.com/doc/refman/8.0/en/mysql-Shell-tutorial-javascript-documents-collections.html

1
kgr

Je sais que ce message est assez ancien, cependant, je voulais répondre.

J'ai rencontré le même besoin et j'ai finalement créé une solution personnalisée.

J'avais besoin de fonctionnalités supplémentaires au-delà de ce qui est disponible avec https://sqlizer.io/#/ .

En gros, j’en avais besoin pour construire des tables de relations parent-enfant à la volée, avec des identifiants de clé étrangère. 

J'ai fini par utiliser Python. J'ai utilisé un tableau multidimensionnel, y stockant les valeurs-clés, examinant le type d'objet sur les valeurs et, s'il s'agissait d'un type dict, appelant l'ensemble à nouveau de manière récursive pour créer un autre tableau multidimensionnel, le reliant à la table parente.

Ce n'était pas une tâche facile, a pris plus d'une semaine pour construire et tester. Mais j’ai maintenant un utilitaire que je peux pointer sur la plupart des API REST qui répondent en JSON et qui exporte automatiquement le résultat directement dans MySQL dans un tableau bien formaté.

Je sais que c’est un ancien post, mais peut-être que cela peut aider quelqu'un… Je voulais créer la même base de données dans mysql que dans mongoDb.

J'ai un fichier json valide avec des données (pas de structure), puis j'ai créé une table dans mysql avec la structure appropriée (en fonction des données json) et je l'ai importé via MySql Workbench.

Ici est l'exemple avec csv, mais vous pouvez charger votre fichier json . Suivez simplement l'assistant pour importer des données dans un tableau et assurez-vous que la structure est valide, sinon rien ne sera importé.

0
Angel M.