Mysql 从SQL返回json对象数组

Mysql 从SQL返回json对象数组,mysql,sql,json,aggregate-functions,Mysql,Sql,Json,Aggregate Functions,我是SQL新手,所以这可能是一个愚蠢的问题,但我很难理解返回JSON对象数组 我的代码是 SELECT JSON_OBJECT( 'title', pc.title, 'reviews', (SELECT CAST(CONCAT('[', GROUP_CONCAT( JSON_OBJECT( 'username',r.uname,

我是SQL新手,所以这可能是一个愚蠢的问题,但我很难理解返回JSON对象数组

我的代码是

SELECT JSON_OBJECT(
            'title', pc.title,
            'reviews', (SELECT CAST(CONCAT('[',
                GROUP_CONCAT(
                    JSON_OBJECT(
                        'username',r.uname,
                        'review',r.review,
                        'date', r.date_added
                    )
                )
            , ']')
            AS JSON) FROM reviews r WHERE pc.pid=r.pid)
        ) AS JSON
        FROM product_comp AS pc;

当没有审阅时,它会正确地返回一个空数组,当有一个审阅时,它会在数组中返回该审阅。但如果有多个评论,它将返回一个空数组。我遗漏了什么?

不要使用CONCAT格式化JSON,而是尝试使用


我还没有测试过这个,但它应该会给你一个正确的想法。

可能重复Well@JoakimDanielson,这将是使用JSON_数组函数的安全方法。。但是,如果您知道JSON结构是如何工作的,那么也可以使用CONCAT和/或GROUP_CONCAT函数生成JSON,这其实并不重要。
SELECT JSON_OBJECT(
  'title', pc.title,
  'reviews', JSON_ARRAYAGG(
               JSON_OBJECT(
                 'username', r.uname,
                 'review', r.review,
                 'date', r.date_added
               )
             )
)
FROM product_comp AS pc
LEFT OUTER JOIN reviews AS r ON pc.pid = r.pid
GROUP BY pc.pid