ron*_*kot 34 mysql json etl data-conversion
我想在MySQL中将结果表转换为JSON数组,最好只使用普通的MySQL命令.例如查询
SELECT name, phone FROM person;
| name | phone |
| Jack | 12345 |
| John | 23455 |
Run Code Online (Sandbox Code Playgroud)
预期的JSON输出将是
[
{
"name": "Jack",
"phone": 12345
},
{
"name": "John",
"phone": 23455
}
]
Run Code Online (Sandbox Code Playgroud)
有没有办法在普通的MySQL中做到这一点?
编辑:
有一些答案如何使用例如MySQL和PHP,但我找不到纯MySQL解决方案.
ron*_*kot 41
在@Schwern的帮助下,我设法提出了这个查询,这似乎有效!
SELECT JSON_ARRAYAGG(JSON_OBJECT('name', name, 'phone', phone)) from Person;
Run Code Online (Sandbox Code Playgroud)
Sch*_*ern 32
您可以使用json_object将行作为JSON对象获取.
SELECT json_object('name', name, 'phone', phone)
FROM person;
Run Code Online (Sandbox Code Playgroud)
这不会将它们放在数组中,也不会在它们之间加上逗号.您必须在获取它们的代码中执行此操作.
Bre*_*dan 13
如果你像我一样坚持使用 MySQL 5.6,试试这个:
SELECT
CONCAT(
'[',
GROUP_CONCAT(
CONCAT(
'{"name":"', name, '"',
',"phone":"', phone, '"}'
)
),
']'
) as json
FROM person
Run Code Online (Sandbox Code Playgroud)
小智 9
JSON 有两个“分组依据”函数,称为 json_arrayagg 和 json_objectagg。
这个问题可以通过以下方式解决:
SELECT json_arrayagg(
json_merge(
json_object('name', name),
json_object('phone', phone)
)
) FROM person;
Run Code Online (Sandbox Code Playgroud)
这需要 MySQL 5.7+。
如果您需要嵌套的 JSON 数组对象,可以按如下方式JSON_OBJECT加入:json_arrayagg
{
"nome": "Moon",
"resumo": "This is a resume.",
"dt_inicial": "2018-09-01",
"v.dt_final": null,
"data": [
{
"unidade": "unit_1",
"id_unidade": 9310
},
{
"unidade": "unit_2",
"id_unidade": 11290
},
{
"unidade": "unit_3",
"id_unidade": 13544
},
{
"unidade": "unit_4",
"id_unidade": 13608
}
]
}
Run Code Online (Sandbox Code Playgroud)
你也可以这样做:
CREATE DEFINER=`root`@`localhost` PROCEDURE `get_lst_caso`(
IN `codigo` int,
IN `cod_base` int)
BEGIN
DECLARE json TEXT DEFAULT '';
SELECT JSON_OBJECT(
'nome', v.nome,
'dt_inicial', v.dt_inicial,
'v.dt_final', v.dt_final,
'resumo', v.resumo,
'data', ( select json_arrayagg(json_object(
'id_unidade',`tb_unidades`.`id_unidade`,
'unidade',`tb_unidades`.`unidade`))
from tb_caso_unidade
INNER JOIN tb_unidades ON tb_caso_unidade.cod_unidade = tb_unidades.id_unidade
WHERE tb_caso_unidade.cod_caso = codigo)
) INTO json
FROM v_caso AS v
WHERE v.codigo = codigo and v.cod_base = cod_base;
SELECT json;
END
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48825 次 |
| 最近记录: |