【发布时间】:2020-03-04 12:21:23
【问题描述】:
我正在尝试使用MYSQL 从JSON 对象中提取一个数组
SELECT json_extract(jsonObjectValue,'$[*].name') as array FROM `TEST` WHERE name='jsonObject'
上面的查询有这个结果
...
["elem1", "elem1", "elem2"]
["elem5", "elem1", "elem2", "elem4"]
...
我尝试通过这样做来提取数组:
SELECT json_extract(json_extract(jsonObjectValue,'$[*].name'),'$[*]') as array FROM `TEST` WHERE name='jsonObject'
想要的结果如下所示:
...
"elem1"
"elem1"
"elem2"
"elem5"
"elem1"
"elem2"
"elem4"
...
但实际结果是:
...
["elem1", "elem1", "elem2"]
["elem5", "elem1", "elem2", "elem4"]
...
我还尝试将 JSON 提取中的 '$[*]' 更改为 '$[0]' 它只显示数组的第一个元素。
更新
要重现问题,请运行以下查询:
CREATE TABLE `TEST` (
`jsonObjectValue` varchar(1000) NOT NULL,
`name` varchar(1000) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
对于数据运行:
INSERT INTO `TEST` (`jsonObjectValue`, `name`) VALUES
('[{\"name\":\"elem1\"},{\"name\":\"elem1\"},{\"name\":\"elem2\"}]',
'JsonObject'),
('test', 'name'),
('test2', 'test2'),
('[{\"name\":\"elem5\"},{\"name\":\"elem1\"},{\"name\":\"elem2\"},
{\"name\":\"elem4\"}]', 'jsonObject');
任何帮助将不胜感激。
【问题讨论】:
-
MySQL 版本????
-
版本是
MySQL 5 -
恐怕你别无选择。使用
$[x].name作为 x 来自数字表 0...999 的路径的蛮力方法可能有效。 -
提供一些示例数据(或 CREATE TABLE + INSERT INTO 脚本)。
-
版本为 MySQL 5 将中间数组视为字符串,使用常用字符串函数和生成的数字表进行解析。