如何使用group-concat mysql创建json格式?
(我使用MySQL)
Example1:
table1:
email | name | phone
-------------------------------------
my1@gmail.com | Ben | 6555333
my2@gmail.com | Tom | 2322452
my2@gmail.com | Dan | 8768768
my1@gmail.com | Joi | 3434356
比如语法代码没有给出格式:
select email, group-concat(name,phone) as list from table1
group by email
我需要的输出:
email | list
------------------------------------------------
my1@gmail.com | {name:"Ben",phone:"6555333"},{name:"Joi",phone:"3434356"}
my2@gmail.com | {name:"Tom",phone:"2322452"},{name:"Dan",phone:"8768768"}
谢谢
发布于 2012-09-20 20:06:35
尝试这个查询-
SELECT
email,
GROUP_CONCAT(CONCAT('{name:"', name, '", phone:"',phone,'"}')) list
FROM
table1
GROUP BY
email;
JSON格式结果-
+---------------+-------------------------------------------------------------+
| email | list |
+---------------+-------------------------------------------------------------+
| my1@gmail.com | {name:"Ben", phone:"6555333"},{name:"Joi", phone:"3434356"} |
| my2@gmail.com | {name:"Tom", phone:"2322452"},{name:"Dan", phone:"8768768"} |
+---------------+-------------------------------------------------------------+
发布于 2016-10-25 16:36:18
在较新版本的MySQL中,您可以使用JSON_OBJECT函数来达到预期效果,如下所示:
GROUP_CONCAT(
JSON_OBJECT(
'name', name,
'phone', phone
)
) AS list
要使SQL响应准备好解析为数组,请执行以下操作:
CONCAT(
'[',
GROUP_CONCAT(
JSON_OBJECT(
'name', name,
'phone', phone
)
),
']'
) AS list
这将为您提供一个字符串,如:[{name: 'ABC', phone: '111'}, {name: 'DEF', phone: '222'}]
,它可以被JSON解析。希望这能有所帮助。
发布于 2015-05-13 02:58:40
Devart上面的答案很好,但K2xL的问题是有效的。我找到的答案是使用HEX()对name列进行十六进制编码,这确保了它将创建有效的JSON。然后在应用程序中,将十六进制转换回字符串。
(很抱歉我的自我推销,但是)我写了一篇关于这个的更多细节的小博客文章:http://www.alexkorn.com/blog/2015/05/hand-rolling-valid-json-in-mysql-using-group_concat/
为Oriol编辑以下示例:
SELECT email,
CONCAT(
'[',
COALESCE(
GROUP_CONCAT(
CONCAT(
'{',
'\"name\": \"', HEX(name), '\", ',
'\"phone\": \"', HEX(phone), '\"',
'}')
ORDER BY name ASC
SEPARATOR ','),
''),
']') AS bData
FROM table
GROUP BY email
还请注意,我已经添加了一个合并,以防该电子邮件没有项目。
https://stackoverflow.com/questions/12511933
复制相似问题