Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MySQL中将JSON数组转换为逗号分隔的字符串?_Mysql_Arrays_Json - Fatal编程技术网

如何在MySQL中将JSON数组转换为逗号分隔的字符串?

如何在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

我有一个JSON列,从中提取值。一切都很顺利,只是我无法将JSON对象中的数组转换为逗号分隔的字符串。下面的结构与我的结构相似

身份证件 名称 数据 ... ... ... 234 AAA {
“…”
“选项”:[
“选项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。。非常有帮助。谢谢