MySQL 5.7 将 JSON 字符串的值连接成一个字符串
MySQL 5.7 Concatenate values of JSON string into one string
我有一个 table,其中 content
列由一个 JSON 对象组成,示例值:
{"blocks":[{"score":"A"},{"score":"A"},{"score":"B"}]}
我想要做的是SELECT
所有分数的字符串表示,所以对于这个例子我想要:
AAB
我已经能够轻松解析 JSON:
SELECT json_extract(content, '$.blocks[*].score') AS scores
这导致:
["A", "A", "B"]
但出于某种原因,我在将 JSON 数组连接成单个字符串时遇到问题(除了将其转换为字符串并调用一些替换函数来删除引号和括号之外)。我尝试了 CONCAT
和 GROUP_CONCAT
的变体,但没有找到解决方案。
将这个 JSON 字符串连接成一个字符串的正确方法是什么?
您可以使用目录 table 例如 information_schema.tables
来生成行以按数组的长度迭代,然后使用 GROUP_CONCAT()
聚合所有成员例如
SELECT GROUP_CONCAT(
JSON_UNQUOTE(
JSON_EXTRACT(content,
CONCAT('$.blocks[', i - 1, '].score'))
)
SEPARATOR '') AS scores
FROM (SELECT JSON_LENGTH(JSON_EXTRACT(content, '$.blocks[*].score')) AS len,
@i := @i + 1 AS i,
content
FROM tab
JOIN information_schema.tables
JOIN (SELECT @i := 0) AS i) AS t
WHERE i <= len;
+--------+
| scores |
+--------+
| AAB |
+--------+
我有一个 table,其中 content
列由一个 JSON 对象组成,示例值:
{"blocks":[{"score":"A"},{"score":"A"},{"score":"B"}]}
我想要做的是SELECT
所有分数的字符串表示,所以对于这个例子我想要:
AAB
我已经能够轻松解析 JSON:
SELECT json_extract(content, '$.blocks[*].score') AS scores
这导致:
["A", "A", "B"]
但出于某种原因,我在将 JSON 数组连接成单个字符串时遇到问题(除了将其转换为字符串并调用一些替换函数来删除引号和括号之外)。我尝试了 CONCAT
和 GROUP_CONCAT
的变体,但没有找到解决方案。
将这个 JSON 字符串连接成一个字符串的正确方法是什么?
您可以使用目录 table 例如 information_schema.tables
来生成行以按数组的长度迭代,然后使用 GROUP_CONCAT()
聚合所有成员例如
SELECT GROUP_CONCAT(
JSON_UNQUOTE(
JSON_EXTRACT(content,
CONCAT('$.blocks[', i - 1, '].score'))
)
SEPARATOR '') AS scores
FROM (SELECT JSON_LENGTH(JSON_EXTRACT(content, '$.blocks[*].score')) AS len,
@i := @i + 1 AS i,
content
FROM tab
JOIN information_schema.tables
JOIN (SELECT @i := 0) AS i) AS t
WHERE i <= len;
+--------+
| scores |
+--------+
| AAB |
+--------+