MySQL和JSON - 将数组转换为行

时间:2016-08-05 09:39:24

标签: mysql json

假设我们有以下变量:

SET @j = '[10, 20, {"a": "bbb"}]';

问题是如何将项目提取为行?

基本查询,如下所示:

SELECT JSON_EXTRACT(@j, '$');

返回与输入相同的值,但我希望得到类似的内容:

10
20
{"a", "bbb"}

怎么做?

1 个答案:

答案 0 :(得分:1)

以下是将数组转换为行的三种方法。使用相同的假定JSON值:

SET @j = '[10, 20, {"a": "bbb"}]';

使用嵌入式数字表。 MySQL和MariaDB兼容:

WITH sequenceGenerator (sequenceNumber) AS (
    SELECT 0 AS sequenceNumber
    UNION ALL
    SELECT 1
    UNION ALL
    SELECT 2
)
SELECT
    JSON_EXTRACT(@j, CONCAT('$[', sequenceNumber, ']')) AS arrayValue
FROM
    sequenceGenerator;

使用MySQL 8.0.4+ JSON_TABLE():

SELECT
    arrayValue
FROM
    JSON_TABLE(
        @j,
         '$[*]'
        COLUMNS(
            arrayValue JSON PATH '$')
    ) AS tt;

使用MariaDB SEQUENCE引擎摆脱内联序列表:

SELECT
    JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
    seq_0_to_2;

要使MariaDB更通用,请对数组长度使用“最佳猜测”最大值,然后将序列限制为JSON长度。此示例假定最大的数组将包含1024个或更少的元素:

SELECT
    JSON_EXTRACT(@j, CONCAT('$[', seq, ']')) AS arrayValue
FROM
    seq_0_to_1024 AS sequenceTable
WHERE
    sequenceTable.seq < JSON_LENGTH(@j);