You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在MySQL中将两个JSON数组按键值对合并为一个JSON对象

将两个JSON数组转为对应键值对JSON对象的MySQL实现方法

当然可以实现这个需求!针对你要把两个同位置对应、同长度的JSON数组转成键值对JSON对象的场景,MySQL 8.0及以上版本提供了现成的函数组合来搞定,下面给你一步步说明具体操作:

先准备示例表和数据

假设你的表叫json_demo,包含两个JSON数组字段keys_arr和values_arr,先插入你的示例数据:

CREATE TABLE json_demo (
    id INT PRIMARY KEY AUTO_INCREMENT,
    keys_arr JSON,
    values_arr JSON
);

INSERT INTO json_demo (keys_arr, values_arr)
VALUES ('["a", "b", "c"]', '["apple", "banana", "coconut"]');

核心实现SQL

用JSON_TABLE拆分数组为行,再用JSON_OBJECT_AGG聚合为JSON对象:

SELECT 
    JSON_OBJECT_AGG(key_item, value_item) AS result_json
FROM 
    json_demo t,
    -- 把键数组拆成单独的行记录
    JSON_TABLE(t.keys_arr, '$[*]' COLUMNS (key_item VARCHAR(100) PATH '$')) keys,
    -- 把值数组拆成单独的行记录
    JSON_TABLE(t.values_arr, '$[*]' COLUMNS (value_item VARCHAR(100) PATH '$')) values
WHERE 
    t.id = 1 -- 指定要处理的目标行
    -- 关键校验:确保两个数组长度一致,避免错位匹配
    AND JSON_ARRAY_LENGTH(t.keys_arr) = JSON_ARRAY_LENGTH(t.values_arr)
GROUP BY 
    t.id;

执行这个SQL后,你就能得到想要的结果:{"a": "apple", "b": "banana", "c": "coconut"}

关键函数说明

  • JSON_TABLE:把JSON数组转换成关系型表的行结构,这样我们就能把数组里的每个元素单独拿出来处理
  • JSON_OBJECT_AGG:把分组后的键和值对聚合为一个JSON对象,正好符合你的需求
  • JSON_ARRAY_LENGTH:用来校验两个数组长度一致,防止因为数组长度不同导致的错误匹配(比如键多值少或者反过来)

低版本MySQL的替代方案(5.7及以下)

如果你的MySQL版本低于8.0,没有JSON_TABLE和JSON_OBJECT_AGG这些函数,实现起来会麻烦很多——需要写自定义存储过程或者用字符串拼接的方式来处理,这种方法不仅容易出错,性能也差。所以更推荐你升级到MySQL 8.0版本来使用上面的便捷方法。

内容的提问来源于stack exchange,提问作者Mahoor13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 04:07:35