是否有可能将内部联接选择结果转换为嵌套列表JSON?

Bin*_*Kim 5 java mysql spring

我正在用Spring开发API控制器。

我有两个表,它们是一对多关系。
一个视频可以有多个产品。

在此处输入图片说明

我可以通过join查询选择视频和产品信息。
选择结果如下:

在此处输入图片说明

JSON我想返回的内容如下:

{
"videos": [{
    "video_id": "V0001",
    "video_nm": "Video001",
    "description": "Some text",
    "thumbnail": "path/img/aaa.jpg",
    "reg_dt": "11-30-2019",
    "products": [{
        "product_id": "P0001",
        "product_nm": "Product001",
        "description": "Some text",
        "info_url": "http://product.com"
    }, ...]
}, ...]
}
Run Code Online (Sandbox Code Playgroud)


是否可以使用查询结果创建上述JSON?还是应该更改JSON格式?

Bil*_*win 6

要在 MySQL 中格式化 JSON,您需要使用JSON_OBJECT()函数和JSON_ARRAYAGG()函数。

\n\n

类似下面的 \xe2\x80\x94 但我没有测试过。

\n\n
SELECT JSON_OBJECT(\'videos\', JSON_ARRAYAGG(vid_subquery.video)) AS videos\nFROM (\n  SELECT\n    JSON_OBJECT(\n      \'video_id\', v.video_id,\n      \'video_nm\', v.video_nm,\n      \'description\', v.description,\n      \'thumbnail\', v.thumbnail,\n      \'reg_dt\', v.reg_dt,\n      \'products\', JSON_ARRAYAGG(\n        JSON_OBJECT(\n          \'product_id\', p.product_id,\n          \'product_nm\', p.product_nm,\n          \'description\', p.description,\n          \'info_url\', p.info_url\n        )\n      )\n    ) AS video\n  FROM video AS v\n  LEFT OUTER JOIN product AS p ON p.video_id = v.video_id\n  GROUP BY v.video_id\n) AS vid_subquery\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果这看起来太困难,那么您应该遵循注释中的建议并编写一个 Java 映射器来完成它。

\n