出现这些错误的原因是父json对象不希望将结果集作为其输入之一,因此您需要具有简单的对象对,例如{name,string}等错误报告-
将来的功能中可能会提供 ..
。这只是意味着您需要将多行结果转换为用逗号分隔的结果隐式形式,然后转换为json数组。
您的第二个示例几乎可以理解。
您可以使用GROUP_CONCAT函数来实现自己的目标
select json_object( 'id',p.id ,'desc',p.`desc` ,'child_objects',json_array( (select GROUP_CONCAt(json_object('id',id,'parent_id',parent_id,'desc',`desc`) ) from child_table where parent_id = p.id)) ) from parent_table p;这几乎可以正常工作,最终将子查询视为一个字符串,从而在其中保留了转义字符。
'{"id": 1, "desc": "parent row 1", "child_objects": [" {\"id\": 1, \"desc\": \"child row 1\", \"parent_id\": 1 }, {\"id\": 2, \"desc\": \"child row 2\", \"parent_id\": 1}" ]}'为了使它以适当的格式工作,您需要更改创建JSON输出的方式,如下所示:
select json_object( 'id',p.id ,'desc',p.`desc` ,'child_objects',(select CAST(CONCAt('[', GROUP_CONCAt( JSON_OBJECT( 'id',id,'parent_id',parent_id,'desc',`desc`)), ']') AS JSON) from child_table where parent_id = p.id) ) from parent_table p;这将为您提供所需的确切结果:
'{"id": 1, "desc": "parent row 1", "child_objects": [{"id": 1, "desc": "child row 1", "parent_id": 1 }, {"id": 2, "desc": "child row 2", "parent_id": 1 }] }'


