6

我刚刚想到在 MySQL 中编写一个函数,我可以将子查询传递给它以输出该子查询的 JSON 表示。

我有很多我经常从 MySQL 获取的数据,然后将其转换为 JSON 以用于 API 输出。在只返回 JSON 的 SQL 服务器上编写一个 MySQL 函数来执行此操作可能会提高速度吗?

我的想象:

query('SELECT * FROM people');

// Output:
// +----+--------+-----+
// | id | name   | Age |
// +----+--------+-----+
// |  1 | Molly  | 24  |
// |  2 | Edward | 28  |
// +----+--------+-----+

query('JSON(SELECT * FROM people)');

// Output:
// [{"id":1,"name":"Molly","Age":24},{"id":2,"name":"Edward","Age":28}]

可能的?如果是的话,我可以如何开始的任何线索?

4

4 回答 4

2

首先,查看 StackOverflow 上的这个线程(SQL Server)。

您还可以在此处查看 PL/JSON 和sql2json (PHP)。

于 2012-06-04T11:32:23.587 回答
2

考虑一个包含用户名和电子邮件的表,您可以在 MySQl 用户定义函数中以下列方式构造 JSON。

SELECT 
     CONCAT("[",
          GROUP_CONCAT(
               CONCAT("{username:'",username,"'"),
               CONCAT(",email:'",email),"'}")
          )
     ,"]") 
AS json FROM users;

返回 JSON 的 MySQL 查询。

[
     {username:'mike',email:'mike@mikesplace.com'},
     {username:'jane',email:'jane@bigcompany.com'},
     {username:'stan',email:'stan@stanford.com'}
]

没有将结果转换为 JSON 格式的内置方法,因此您必须自己在 UDF 中进行操作。

于 2012-06-04T11:37:50.340 回答
2

从 MySQL 5.7 开始,您可以使用JSON_ARRAYJSON_MERGE其他功能输出 JSON。

它是这样工作的:

RETURN JSON_ARRAY('id':1,'name':'Molly','Age':24);

您还可以拥有多个文档:

RETURN JSON_MERGE('{"id":1,"name":"Molly","Age":24}', '{"id":2,"name":"Edward","Age":28}');
于 2016-11-14T14:58:21.120 回答
0

我没有看到编写 SQL 来生成 JSON 的意义,它只是凌乱而丑陋,并且很难概括为一个通用函数,而且它并不是 SQL 的真正设计目的;SQL 旨在管理、存储和检索您需要的记录,并对结果集执行计算——非常快速和即时——仅此而已。如果您需要 JSON,则无论如何都必须将行吐出到服务器端脚本,因此您不妨使用脚本语言来创建 JSON——这就是脚本语言的用途。

于 2012-06-04T13:46:10.957 回答