我正在回顾一些新的JSON 特性 https://dev.mysql.com/doc/refman/5.7/en/json.html并想知道是否有一种聪明(或明显)的方法将行集作为 JSON 对象返回。理想情况下,无需命名键或使用任何类型的字符串操作。
Example:
TABLE: people
id name age
1 bob 54
2 jay 32
3 john 10
SELECT * FROM people where id = 1
会回来
{"id":1,"name":"bob","age":54}
或者甚至更好
SELECT * FROM people
将返回所有 3 个对象的数组
如果您不熟悉新的 JSON 功能,新功能之一是JSON_OBJECT
SELECT JSON_OBJECT('key1', 1, 'key2', 'abc')
将返回一个键值 JSON 对象。
取决于“命名键或任何类型的字符串操作”的含义。如果您愿意将键的命名和字符串操作封装在存储过程中,这样当您使用时就不需要命名键calling程序,那么是的,您可以:
drop procedure if exists spGetJson;
delimiter $$
create procedure spGetJson(pTableName varchar(45), pId int)
begin
select group_concat(concat("'", COLUMN_NAME, "', ", COLUMN_NAME) separator ',')
into @cols
from information_schema.columns
where TABLE_NAME = pTableName and TABLE_SCHEMA = database();
set @q = concat('select json_object(', @cols, ') from ', pTableName);
if pId is not null then
set @q = concat(@q, ' where id = ', pId);
end if;
set @q = concat(@q, ';');
prepare statement from @q;
execute statement;
deallocate prepare statement;
end $$
delimiter ;
然后您可以使用以下任一方式调用此过程:
call spGetJson('people', 1);
call spGetJson('people', null);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)