首页 > 解决方案 > 在mysql中将两个json数组作为key-value并创建一个json对象

问题描述

我在 MySQL 中有两个 JSON 数组字段,如下所示:

["a", "b", "c"]
["apple", "banana", "coconut"]

现在我想将它们组合成一个 JSON 对象,如下所示:

{"a":"apple", "b":"banana", "c":"coconut"}

是否有任何 MySQL 功能?

标签: mysqlsqljsonmysql-8.0

解决方案


我会以一种简单的方式来解决这个问题。

  • 使用 . 取消嵌套两个 JSON 结构JSON_TABLE()
  • 将两个表连接在一起。
  • 构造适当的 JSON 对象并聚合。

下面实现了这个逻辑。第一个 CTE 提取密钥。第二个提取值,最后将它们组合起来:

WITH the_keys as (
      SELECT j.*
      FROM t CROSS JOIN
           JSON_TABLE(t.jsdata1,
                      '$[*]'
                      columns (seqnum for ordinality, the_key varchar(255) path '$')
                     ) j
     ),
     the_values as (
      SELECT j.*
      FROM t CROSS JOIN
           JSON_TABLE(t.jsdata2,
                      '$[*]'
                      columns (seqnum for ordinality, val varchar(255) path '$')
                     ) j
     )
select json_objectagg(the_keys.the_key, the_values.val)
from the_keys join
     the_values
     on the_keys.seqnum = the_values.seqnum;

是一个 db<>fiddle。

请注意,这是非常通用的(您可以向行添加更多元素)。如果您在不同的行上有键/值对,并且它不使用不推荐使用的功能,您可以轻松地对其进行调整以返回多行数据。


推荐阅读