好的,我从这个数据开始:
MariaDB [test]> select * from table1;
+------+---------------------------------------------------------------------------+
| id | data |
+------+---------------------------------------------------------------------------+
| 1 | {"1": "content1", "2": "content2", "3":"content3","10000":"content10000"} |
+------+---------------------------------------------------------------------------+
询问:
WITH RECURSIVE data AS (
SELECT
JSON_VALUE(JSON_KEYS(data), '$[0]') AS k,
JSON_EXTRACT(data, CONCAT('$.',JSON_VALUE(JSON_KEYS(data), '$[0]'))) AS v,
0 AS idx
FROM table1
UNION
SELECT
JSON_VALUE(JSON_KEYS(data), CONCAT('$[', d.idx + 1, ']')) AS k,
JSON_EXTRACT(data, CONCAT('$.',JSON_VALUE(JSON_KEYS(data), CONCAT('$[', d.idx + 1, ']')))) AS v,
d.idx + 1 AS idx
FROM data AS d, table1
WHERE d.idx < JSON_LENGTH(JSON_KEYS(data)) - 1
) SELECT * FROM data;
样本输出(因为如果只有有限的数据):
+-------+----------------+------+
| k | v | idx |
+-------+----------------+------+
| 1 | "content1" | 0 |
| 2 | "content2" | 1 |
| 3 | "content3" | 2 |
| 10000 | "content10000" | 3 |
+-------+----------------+------+
添加 WHERE 子句应该不是问题。