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

标签 java mysql spring

我正在使用 Spring 开发 API Controller 。

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

enter image description here

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

enter image description here

我想返回的 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/

相关文章:

java - 如何在 JVM 关闭之前设置确认?

java - 如何将一个 bean 的构造函数参数传递给嵌套 bean

spring - 如何使 springmodules 方法缓存中的单个条目无效?

java - Spring 批处理 : JobExecution from PreparedStatementSetter

java - Maven 错误 :Perhaps you are running on a JRE rather than a JDK?

java - tnameserv : Port problems with OSX

java - Spring Cloud Stream支持动态路由消息

php - MySQL PHP - UTF8数据插入编码

php - SUM() 在 MySQL : SUM() with DISTINCT 中不起作用

通过 VBScript 的 MYSQL 更新命令