web-dev-qa-db-ja.com

JSONをMysqlにインポートする

私が直面している問題は、MySQLにJSONをインポートすることです。私はインターウェブを検索し、stackoverflowとおそらくさらに多くのソースを検索しましたが、単一のproperソリューションを見つけることができませんでした。ここでの完全な開示-私はPHP、SQLでもJSONの専門家でもありません。

私が達成しようとしているのは非常に簡単です:このJSONファイルをインポートします https://developers.facebook.com/tools/Explorer/method=GET&path=245226895508982%2Ffeed%3Faccess_token%3D%3Caccess_token%3E= = Mysqlデータベースに。どういうわけかJSONデータを列に割り当て、コンテンツに応じて行をキュレートする必要があることを理解しています。すべてのデータが必要なわけではありませんが、ほとんどは必要です。データは、後でユーザーからの検索クエリを通じてエコーする必要があります。

私の質問はかなり簡単に思えます-どうすればいいですか?

追伸:XMLに変換しようとしましたが、XMLをSQLデータベースにインポートするための十分な権限がありません。また、コンバータは最高の仕事をしませんでした。

13
John

Jsonをcsvにエクスポートできます: http://www.danmandle.com/blog/json-to-csv-conversion-utility/ または https://github.com/ danmandle/JSON2CSV

それから:

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

ワンショットでも大丈夫です。

ファイル内のデータを読み込む の詳細情報。

11
kmas

他の人が言ったように、あなたはあなたが求めていることをするために少し変換をしなければならないでしょう。幸いなことに、PHPデータを反復処理し、ほとんどの作業をあなたのために行うのはそれほど難しくありません。ここに手っ取り早い試みがあります。

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

これにより、一連のINSERT INTO my_table(...)VALUES(...); .sqlファイルに保存してMySQLにインポートできるSQLステートメント。このメソッドを使用すると、各INSERTで異なる列を使用しても問題は発生しません。

注:addslashes()はこれを行うための非常に安全な方法ではなく、real_escape_string()のようなものが望ましいでしょうが、これはJSONデータが信頼できると仮定してDB接続なしで機能します。

7
smashuu

MySQL Shell 8.0.1 を使用すると、util.importJson Shell API関数またはコマンドラインオプション--importを使用して、JSONドキュメントをMySQL Serverに直接インポートできます。たとえば、ファイルからのインポート:

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

またはJSONドキュメントを標準入力にパイプします。

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

ここで、collection_nameコレクション です。

MySQL ShellのJSONインポートユーティリティの詳細: https://dev.mysql.com/doc/mysql-Shell/8.0/en/mysql-Shell-utilities-json.html

ドキュメントストアの詳細: https://dev.mysql.com/doc/refman/8.0/en/document-store.html

ドキュメントとコレクションの詳細: https://dev.mysql.com/doc/refman/8.0/en/mysql-Shell-tutorial-javascript-documents-collections.html

4
kgr

私はこの投稿がかなり古いことを知っていますが、返信したかったです。

私はこれと同じニーズに遭遇し、カスタムソリューションを構築することになりました。

https://sqlizer.io/#/ で利用できる機能以上の機能を追加する必要がありました。

基本的に、外部キーIDを使用して、その場で親子関係テーブルを構築する必要がありました。

結局Pythonを使用することになりました。多次元配列を使用し、そこにキーと値を保存し、値のオブジェクトの型を調べ、それがdict型の場合は、全体を再度再帰的に呼び出して別の多次元配列を作成し、それをリンクします親テーブル。

簡単な作業ではなく、構築とテストに1週間以上かかりました。しかし、今では、JSONで応答するAPIを最大でRESTと指定でき、結果を適切にフォーマットされたテーブルでMySQLに直接ダンプできるユーティリティがあります。

古い投稿ですが、誰かを助けることができるかもしれません。 mongoDbにあるのと同じデータベースをmysqlに作成したかった。

データ(構造ではない)を含む有効なjsonファイルがあり、(jsonデータに従って)適切な構造を持つmysqlにテーブルを作成し、MySqlワークベンチを介してインポートしました。

ここ はcsvの例ですが、jsonファイルをロードできます。ウィザードに従ってデータをテーブルにインポートし、構造が有効であることを確認してください。そうでない場合、何もインポートされません。

0
Angel M.