我正在使用 Spring 开发 API Controller 。
我有两个表,它们是一对多的关系。
一个视频可以有多个产品。
我可以通过join query来选择视频和产品信息。
选择结果如下:
我想返回的 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"
}, ...]
}, ...]
}
是否可以使用查询结果创建上述 JSON?或者我应该更改 JSON 格式?
最佳答案
要在 MySQL 中格式化 JSON,您需要使用 JSON_OBJECT()函数和 JSON_ARRAYAGG()功能。
类似下面的内容——但我还没有测试过。
SELECT JSON_OBJECT('videos', JSON_ARRAYAGG(vid_subquery.video)) AS videos
FROM (
SELECT
JSON_OBJECT(
'video_id', v.video_id,
'video_nm', v.video_nm,
'description', v.description,
'thumbnail', v.thumbnail,
'reg_dt', v.reg_dt,
'products', JSON_ARRAYAGG(
JSON_OBJECT(
'product_id', p.product_id,
'product_nm', p.product_nm,
'description', p.description,
'info_url', p.info_url
)
)
) AS video
FROM video AS v
LEFT OUTER JOIN product AS p ON p.video_id = v.video_id
GROUP BY v.video_id
) AS vid_subquery
如果这看起来太难了,那么您应该按照评论中的建议编写一个 Java 映射器来完成它。
关于java - 是否有可能将内部联接选择结果转换为嵌套列表 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56042863/