如何在MySQL中将JSON数组转换为逗号分隔的字符串?
我有一个JSON列,从中提取值。一切都很顺利,只是我无法将JSON对象中的数组转换为逗号分隔的字符串。下面的结构与我的结构相似 身份证件 名称 数据 ... ... ... 234 AAA {如何在MySQL中将JSON数组转换为逗号分隔的字符串?,mysql,arrays,json,Mysql,Arrays,Json,我有一个JSON列,从中提取值。一切都很顺利,只是我无法将JSON对象中的数组转换为逗号分隔的字符串。下面的结构与我的结构相似 身份证件 名称 数据 ... ... ... 234 AAA {“…”“选项”:[“选项A”、“选项B”、“选项C”]、“…” ... ... ... 假设您使用的是mysql 8.0,那么您可以将JSON_TABLE与CROSS-JOIN和GROUP_-CONCAT一起使用来实现这一点: 请尝试以下查询: select t1.id,t1.name, group_con
“…”
“选项”:[
“选项A”、
“选项B”、
“选项C”
]、
“…
” ... ... ...
假设您使用的是mysql 8.0,那么您可以将
JSON_TABLE
与CROSS-JOIN
和GROUP_-CONCAT
一起使用来实现这一点:
请尝试以下查询:
select t1.id,t1.name, group_concat(t2.data_ )
from test t1
cross join
json_table(t1.data->'$.options', '$[*]' columns(data_ varchar(10) path '$'))t2
group by 1,2
如果要将所有值括在引号中,则将上述查询中的group_concat(t2.data)
替换为group_concat(concat(“”,t2.data")”)
解释
在您的问题中,您希望将JSON的options
数组的值转换为逗号分隔的字符串。因此,解决方案的步骤是:
第1步。从JSON获取数组数据:这里,通过使用->
操作符,我们可以从数据
字段获取数据<代码>数据->“$.options”将以JSON格式返回数组
第2步。unest数组的所有元素:这里JSON_TABLE
()将为我们做一些事情。参见下面的示例
select * from json_table(
'["Option A","Option B","Option C"]',
'$[*]' columns(data_ varchar(10) path '$'))t
Result:
data_
Option A
Option B
Option C
第3步。交叉连接未测试的记录:在取消测试数组后,将数组与主表交叉连接
it,它将根据JSON\u table
返回的每个记录返回一行。在下面的示例中,您将获得id为234的3行,因为数组中有3个元素
select t1.id,t1.name,t2.data_
from test t1
cross join
json_table(t1.data->'$.options', '$[*]' columns(data_ varchar(10) path '$'))t2
Result:
id name data_
234 AAA Option A
234 AAA Option B
234 AAA Option C
第4步。将结果分组:在最后一步中,使用Group_CONCAT
()按id
、name
等对所有记录进行分组,以获得所需的输出
您使用的是哪个版本的mysqlusing@AkhileshMishra我使用的是MySQL v8.0.25。谢谢你的回答。很抱歉,我在值中加了引号,实际上我希望没有qoutes。抱歉再问一点,你能解释一下这是怎么工作的吗?补充解释!!!美丽的解释@AkhileshMishra。。非常有帮助。谢谢