【问题标题】:MySQL load data infile json arrayMySQL加载数据infile json数组
【发布时间】:2017-07-01 12:44:19
【问题描述】:

我想将一个包含 json 数组的 json 文件导入到 mysql 表中。

使用LOAD DATA LOCAL INFILE '/var/lib/mysql-files/big_json.json' INTO TABLE test(json); 给出错误消息Invalid JSON text: "Invalid value." at position 1 in value for column

我的 json 如下所示:

[
  {
    "id": "6defd952",
    "title": "foo"
  },
  {
    "id": "98ee3d8b",
    "title": "bar"
  }
]

如何参数化加载命令以遍历数组?

【问题讨论】:

标签: mysql arrays json


【解决方案1】:

无论出于何种原因,在 5.7 和 8.0+ 中,当您尝试加载打印精美的 JSON 时,MySQL 都会出错,因此您需要 JSON 格式紧凑,即:

[{"id":"6defd952","title":"foo"},{"id":"98ee3d8b","title":"bar"}]

这可以通过将 json 对象读取到 jq 并使用 -c 标志以紧凑形式输出以重新格式化文本来完成:

窗户:

type input.json | jq -c . > infile.json

Mac/Linux:

cat input.json | jq -c . > infile.json

如果您从 std_out 而不是文件读取,只需替换 cat/type 部分并以相同方式管道到 jq。生成的“infile.json”应该适用于 LOAD DATA INFILE 语句。

如果您想遍历加载的数组,请使用 JSON_EXTRACT(JSON_FIELD, CONCAT('$[', i, ']')) 和序数变量 i 在单个查询中遍历根文档(数组)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-28
    • 2010-10-22
    • 2011-05-25
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 2013-10-02
    相关资源
    最近更新 更多