mySQL 5.7使用新的json功能将行返回为json

时间:2016-02-10 20:02:58

标签: mysql json mysql-json

我正在查看一些新的JSON features,并想知道是否有一种聪明的(或明显的)方法将行集作为JSON对象返回。理想情况下,无需命名键或使用任何类型的字符串操作。

示例:

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对象。

1 个答案:

答案 0 :(得分:5)

取决于你的意思"命名键或任何类型的字符串操作"。如果您乐意将所述键和字符串操作命名封装在存储过程中,以便在您调用过程时不需要命名键,那么是的,你可以:

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 ;

然后您可以使用以下任一方式调用此proc:

call spGetJson('people', 1);
call spGetJson('people', null);