我尝试导入一个如下所示的 JSON 文件:
[
{
"executionDateTime":"2017-07-07 15:21:15",
"A":1,
"B":1
},
{
"executionDateTime":"2017-07-07 15:21:15",
"A":2,
"B":2
},
{
"executionDateTime":"2017-07-07 15:21:15",
"A":3,
"B":3
},
{
"executionDateTime":"2017-07-07 15:21:15",
"A":4,
"B":4
}]
我想将上述文件导入 mySQL 数据库,并且我希望我的表看起来有点像这样:
executionDateTime A B
2017-07-07 15:21:15 1 1
2017-07-07 15:21:15 2 2
2017-07-07 15:21:15 3 3
2017-07-07 15:21:15 4 4
我已尝试使用以下查询来执行此操作(如果文件格式为 CSV,这对我来说可行),但它没有用。
LOAD DATA local INFILE '<path>/my_file.json'
INTO TABLE database_name.my_table FIELDS TERMINATED BY ','
ENCLOSED BY '"'LINES TERMINATED BY '\n' IGNORE 1 ROWS;
上面的查询给了我一个看起来像这样的表:
(我知道,mySQL 具有导入文件的内置功能,但我不想使用该功能,我正在寻找查询...:))
如果有人不得不面对这样的问题并得到解决方案,请提出建议。请不要在没有给出实际可行的解决方案的情况下将此问题标记为重复。
非常感谢。
最佳答案
引用: https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html
我知道这是一个较旧的线程,但 MySQL 5.7 现在有一个 JSON 类型,您可以在其中将 JSON 导入一个字段,然后您可以使用计算字段将 json 拆分为单独的字段。这是粗略的代码(未经测试):
创建一个 JSON 测试表:
CREATE TABLE IF NOT EXISTS jsontest(
rowid INT AUTO_INCREMENT NOT NULL UNIQUE,
jsondata json,
`executionDateTime` TIMESTAMP,
`A` BIGINT UNSIGNED,
`B` BIGINT UNSIGNED,
);
将您的 JSON 导入 JSON 字段:
LOAD DATA LOCAL INFILE '/path/to/testfile.json' into table jsontest(jsondata);
拆分你的数据(这可以组合成一个命令)
UPDATE jsontest set executionDateTime=(jsondata->>'$.executionDateTime');
UPDATE jsontest set A=(jsondata->>'$.A');
UPDATE jsontest set B=(jsondata->>'$.B');
如果不想有多余的字段,可以这样查询jsondata字段:
SELECT jsondata->>"$.executionDateTime" AS executionDateTime,
jsondata->>"$.A" AS A,
jsondata->>"$.B" AS B;
关于mysql - 如何使用简单的查询将 JSON 文件导入 MySQL 数据库,而不实际将其转换为 CSV 等任何其他文件格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45075289/