将 JSON 导入 Mysql

2022-08-31 00:43:12

我面临的问题是将JSON导入Mysql。我搜索了互联网络,搜索了stackoverflow,甚至可能还有更多的来源,但找不到一个合适的解决方案。这里完全披露 - 我不是PHP,SQL也不是JSON专业人士。

我试图完成的相当简单:将此JSON文件 https://developers.facebook.com/tools/explorer/method=GET&path=245226895508982%2Ffeed%3Faccess_token%3D%3Caccess_token%3E=导入Mysql数据库。我知道我需要以某种方式将JSON数据分配到列中,然后根据内容相应地管理行。我不需要所有的数据,但大部分数据。稍后应通过用户的搜索查询回显数据。

我的问题似乎很简单 - 我该怎么做?

PS:我尝试将其转换为XML,但我没有足够的权限将XML导入SQL数据库。此外,转换器也不是最好的工作。


答案 1

您可以将 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;

对于一次性镜头来说应该没问题。

有关加载文件中数据的详细信息


答案 2

就像其他人说的那样,你将不得不做一点点的转换来做你所要求的。幸运的是,让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 (...)值 (...);SQL 语句,您可以将其保存到.sql文件并导入到 MySQL 中。使用此方法,每个 INSERT 可以具有不同的列,而不会引起问题。

注意:addslashes() 不是一种非常安全的方法,像real_escape_string()这样的东西会更好,但是假设你的JSON数据是可信的,这在没有数据库连接的情况下工作。


推荐