首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用group-concat mysql创建json格式?

如何使用group-concat mysql创建json格式?
EN

Stack Overflow用户
提问于 2012-09-20 19:45:54
回答 4查看 61.8K关注 0票数 65

如何使用group-concat mysql创建json格式?

(我使用MySQL)

Example1:

table1:

代码语言:javascript
复制
email            |    name  |   phone
-------------------------------------
my1@gmail.com    | Ben      | 6555333
my2@gmail.com    | Tom      | 2322452
my2@gmail.com    | Dan      | 8768768
my1@gmail.com    | Joi      | 3434356

比如语法代码没有给出格式:

代码语言:javascript
复制
select email, group-concat(name,phone) as list from table1 
group by email

我需要的输出:

代码语言:javascript
复制
email         |    list
------------------------------------------------
my1@gmail.com |  {name:"Ben",phone:"6555333"},{name:"Joi",phone:"3434356"}
my2@gmail.com |  {name:"Tom",phone:"2322452"},{name:"Dan",phone:"8768768"}

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-20 20:06:35

尝试这个查询-

代码语言:javascript
复制
SELECT
  email,
  GROUP_CONCAT(CONCAT('{name:"', name, '", phone:"',phone,'"}')) list
FROM
  table1
GROUP BY
  email;

JSON格式结果-

代码语言:javascript
复制
+---------------+-------------------------------------------------------------+
| email         | list                                                        |
+---------------+-------------------------------------------------------------+
| my1@gmail.com | {name:"Ben", phone:"6555333"},{name:"Joi", phone:"3434356"} |
| my2@gmail.com | {name:"Tom", phone:"2322452"},{name:"Dan", phone:"8768768"} |
+---------------+-------------------------------------------------------------+
票数 81
EN

Stack Overflow用户

发布于 2016-10-25 16:36:18

在较新版本的MySQL中,您可以使用JSON_OBJECT函数来达到预期效果,如下所示:

代码语言:javascript
复制
GROUP_CONCAT(
  JSON_OBJECT(
    'name', name,
    'phone', phone
  )
) AS list

要使SQL响应准备好解析为数组,请执行以下操作:

代码语言:javascript
复制
CONCAT(
  '[',
  GROUP_CONCAT(
    JSON_OBJECT(
      'name', name,
      'phone', phone
    )
  ),
  ']'
) AS list

这将为您提供一个字符串,如:[{name: 'ABC', phone: '111'}, {name: 'DEF', phone: '222'}],它可以被JSON解析。希望这能有所帮助。

票数 92
EN

Stack Overflow用户

发布于 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编辑以下示例:

代码语言:javascript
复制
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

还请注意,我已经添加了一个合并,以防该电子邮件没有项目。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12511933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档