如何使用 GROUP_CONCAT 返回 JSON_ARRAY

Iky*_*ava 2 mysql sql json group-concat

我尝试使用“concat”和“group_concat”函数返回json对象。问题是我需要使用 group_concat 但我想要一个有效的 JSON 结构。我做错了什么?

  1. {“a”:“a”,“b”:“b”,“id”:空}
  2. [{"id": "123"}]

...

SELECT JSON_REPLACE((
                  SELECT JSON_OBJECT(
                             'a', 'a',
                             'b', 'b',
                             'id', null
                           )), '$.id', (
                  SELECT CONCAT(
                             '[', group_concat(JSON_OBJECT(
                          'id',
                          '123')),
                             ']'))
     )
Run Code Online (Sandbox Code Playgroud)

结果: {"a": "a", "b": "b", "id": "[{\"id\": \"123\"}]"}

预期的: {"a": "a", "b": "b", "id": [{"id": "123"}]}

Bar*_*han 5

解决问题的第三个参数的额外CASTing :AS JSONJSON_REPLACE

SELECT JSON_REPLACE((
                  SELECT JSON_OBJECT(
                             'a', 'a',
                             'b', 'b',
                             'id', null
                           )), '$.id', 
                         CAST( CONCAT('[', GROUP_CONCAT(
                                            JSON_OBJECT('id', '123')),
                                      ']') AS JSON )) as "Result JSON"
Run Code Online (Sandbox Code Playgroud)
结果 :
SELECT JSON_REPLACE((
                  SELECT JSON_OBJECT(
                             'a', 'a',
                             'b', 'b',
                             'id', null
                           )), '$.id', 
                         CAST( CONCAT('[', GROUP_CONCAT(
                                            JSON_OBJECT('id', '123')),
                                      ']') AS JSON )) as "Result JSON"
Run Code Online (Sandbox Code Playgroud)

Demo