mysql - 如何使用简单的查询将 JSON 文件导入 MySQL 数据库,而不实际将其转换为 CSV 等任何其他文件格式?

标签 mysql json

我尝试导入一个如下所示的 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;

上面的查询给了我一个看起来像这样的表:

output_table

(我知道,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/

相关文章:

php - 如何从 ODBC 查询中转义单引号

php - 查询显示数据库中的四个随机数据

javascript - 从树中消除根元素,如表示数据

json - 加密json数据

php - 提交动态重复表格的最佳方式

mysql - 在 MySQL 中存储表情符号

PHP 在日期之间搜索 SQL DB

javascript - JSON 键存在但返回 false

javascript - 在 JSON 文件中创建时间线并根据该 JSON 中的日期时间更新页面

json - 使用现有字段作为 mongodb 中的 objectId 来使用 Node 和 Express 创建 REST api?