mysql - 在mysql中将两个json数组作为key-value并创建一个json对象
问题描述
我在 MySQL 中有两个 JSON 数组字段,如下所示:
["a", "b", "c"]
["apple", "banana", "coconut"]
现在我想将它们组合成一个 JSON 对象,如下所示:
{"a":"apple", "b":"banana", "c":"coconut"}
是否有任何 MySQL 功能?
解决方案
我会以一种简单的方式来解决这个问题。
- 使用 . 取消嵌套两个 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。
请注意,这是非常通用的(您可以向行添加更多元素)。如果您在不同的行上有键/值对,并且它不使用不推荐使用的功能,您可以轻松地对其进行调整以返回多行数据。
推荐阅读
- java - 如何使用可变 jar 名称在 EC2 Linux 上部署和重启 Spring Boot 应用程序
- pyspark - 我们如何在本地机器上使用 pyspark 实现多核划分?
- firebase - Still get error 'Operation was rejected because the system is not in a state required for the operation's execution' after creating firebase index
- python - 当我有一些 Nan 值时,根据一个变量对我的数据进行分组不会产生预期的结果
- node.js - 如何使用commander.js实现诸如命令之类的来回问题?
- python-3.x - AWS Glue:在 AWS Glue python shell 作业 Python 库路径上安装 pandas==1.0.3
- javascript - Django rest 框架 PUT 方法与 Postman 一起使用,但不适用于 Javascript FormData
- node.js - Linux AWS 仍在寻找 Node 和 NPM 的卸载版本
- linux - 如何使用 ffplay 和 youtube-dl 在终端中播放 youtube 歌曲
- django - 如何使用当前对象作为变量