如何 return JSON_ARRAY 使用 GROUP_CONCAT

How to return JSON_ARRAY using an GROUP_CONCAT

我已经使用 "concat" 和 "group_concat" 函数尝试 return 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')),
                             ']'))
     )

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

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

这就是你需要的JSON_ARRAYAGG

  SELECT JSON_REPLACE((SELECT JSON_OBJECT(
                             'a', 'a',
                             'b', 'b',
                             'id', null
                           )), '$.id', 
            (SELECT JSON_ARRAYAGG(JSON_OBJECT('id','123')))           
  )

如果不使用 JSON_ARRAYAGG

  SELECT JSON_REPLACE((SELECT JSON_OBJECT(
                             'a', 'a',
                             'b', 'b',
                             'id', null
                           ))
            , '$.id'
            ,  (SELECT JSON_ARRAY(CAST(group_concat(JSON_OBJECT('id','123')) as json)))
   )

JSON_REPLACE 的第三个参数的额外 CASTing AS JSON 修复了问题:

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"
Result :
{
  "a": "a",
  "b": "b",
  "id": [
    {
      "id": "123"
    }
  ]
}

Demo