如何使用GROUP_CONCAT返回JSON_ARRAY

时间:2019-08-29 08:21:35

标签: mysql sql json group-concat json-arrayagg

我尝试使用“ 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')),
                             ']'))
     )

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

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

2 个答案:

答案 0 :(得分:2)

CAST的第三个参数加上AS JSON的{​​{1}}可以解决此问题:

JSON_REPLACE

Demo

答案 1 :(得分:0)

这就是您需要的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)))
   )