将MySQL中的JSON数组转换为行

现在可以在MySQL

8中通过JSON_TABLE函数:https ://dev.mysql.com/doc/refman/8.0/en/json-table-

functions.html

我喜欢MySQL 5.7中的新JSON函数,但是遇到了一个试图将JSON中的值合并到普通表结构中的块。

掌握JSON,从中处理和提取数组等都很简单。始终使用JSON_EXTRACT。但是从JSON数组到行的逆过程呢?也许我对现有的MySQL

JSON功能非常关注,但是我无法弄清楚这一点。

例如,假设我有一个JSON数组,想为数组中的每个元素插入一行及其值?我发现的唯一方法是编写一堆JSON_EXTRACT(…’$

[0]’)JSON_EXTRACT(…’$ [1]’)等并将它们结合在一起。

还是说我有一个JSON数组,并希望将GROUP_CONCAT()转换为单个逗号分隔的字符串?

换句话说,我知道我可以这样做:

SET @j = '[1, 2, 3]';

SELECT GROUP_CONCAT(JSON_EXTRACT(@j, CONCAT('$[', x.n, ']'))) AS val

FROM

(

SELECT 0 AS n

UNION

SELECT 1 AS n

UNION

SELECT 2 AS n

UNION

SELECT 3 AS n

UNION

SELECT 4 AS n

UNION

SELECT 5 AS n

) x

WHERE x.n < JSON_LENGTH(@j);

但这伤了我的眼睛。还有我的心。

我该怎么做:

SET @j = '[1, 2, 3]';

SELECT GROUP_CONCAT(JSON_EXTRACT(@j, '$[ * ]'))

…并把数组中的值与JSON数组本身连接在一起?

我猜我在这里寻找的是某种类似于JSON_SPLIT的代码:

SET @j = '[1, 2, 3]';

SELECT GROUP_CONCAT(val)

FROM

JSON_SPLIT(JSON_EXTRACT(@j, '$[ * ]'), '$')

如果MySQL具有适当的STRING_SPLIT(val,’separator’)表返回函数,我可以破解它(逃避该死),但这也不可用。

回答:

这是在MySQL 8+中使用JSON_TABLE的方法:

SELECT *

FROM

JSON_TABLE(

'[5, 6, 7]',

"$[*]"

COLUMNS(

Value INT PATH "$"

)

) data;

您还可以通过将分隔的字符串转换为JSON字符串,将其用作MySQL否则缺少的常规字符串拆分函数(类似于PG的regexp_split_to_table或MSSQL的STRING_SPLIT):

set @delimited = 'a,b,c';

SELECT *

FROM

JSON_TABLE(

CONCAT('["', REPLACE(@delimited, ',', '", "'), '"]'),

"$[*]"

COLUMNS(

Value varchar(50) PATH "$"

)

) data;

以上是 将MySQL中的JSON数组转换为行 的全部内容, 来源链接: utcz.com/qa/436227.html

回到顶部