MySQL 中处理 JSON 数组并为每个元素拼接字符串

在 MySQL 中处理 JSON 数组并为每个元素拼接字符串,可以使用以下几种方法:

1. 使用 JSON_TABLE 函数(MySQL 8.0+)

sql 复制代码
SELECT 
    GROUP_CONCAT(CONCAT('prefix_', jt.item, '_suffix') SEPARATOR ', ') AS concatenated_items
FROM 
    your_table,
    JSON_TABLE(
        your_json_column,
        '$[*]' COLUMNS (
            item VARCHAR(100) PATH '$'
        )
    ) AS jt;

2. 使用 JSON_EXTRACT 和字符串函数(MySQL 5.7+)

sql 复制代码
SELECT 
    CONCAT(
        'prefix_',
        REPLACE(
            REPLACE(
                REPLACE(
                    JSON_EXTRACT(your_json_column, '$[*]'),
                    '[',
                    ''
                ),
                ']',
                ''
            ),
            '"',
            ''
        ),
        '_suffix'
    ) AS concatenated_string
FROM 
    your_table;

3. 自定义函数处理 JSON 数组

创建自定义函数:

sql 复制代码
CREATE FUNCTION json_array_concat_elements(
    json_array JSON,
    prefix VARCHAR(255),
    suffix VARCHAR(255),
    `separator` VARCHAR(10)
) RETURNS TEXT
DETERMINISTIC
BEGIN
    DECLARE result TEXT DEFAULT '';
    DECLARE i INT DEFAULT 0;
    DECLARE array_length INT;
    DECLARE current_element VARCHAR(255);
    
    SET array_length = JSON_LENGTH(json_array);
    
    WHILE i < array_length DO
        SET current_element = JSON_UNQUOTE(JSON_EXTRACT(json_array, CONCAT('$[', i, ']')));
        
        IF i > 0 THEN
            SET result = CONCAT(result, `separator`);
        END IF;
        
        SET result = CONCAT(result, prefix, current_element, suffix);
        
        SET i = i + 1;
    END WHILE;
    
    RETURN result;
END 

使用示例:

sql 复制代码
SELECT 
    json_array_concat_elements(
        your_json_column, 
        'prefix_', 
        '_suffix', 
        ', '
    ) AS concatenated_items
FROM 
    your_table;

注意事项

  1. MySQL 5.7 开始支持 JSON 数据类型,但完整功能在 8.0 版本更完善
  2. 对于大型 JSON 数组,性能可能会受影响
  3. GROUP_CONCAT 有长度限制,可通过 SET SESSION group_concat_max_len = 1000000; 调整
  4. JSON_TABLE 是 MySQL 8.0 引入的功能,提供了最灵活的 JSON 数据处理方式
相关推荐
Moe4883 分钟前
Spring AI Advisors:从链式增强到递归顾问
java·后端
37手游后端团队12 分钟前
Claude Code 指南:终端 AI 编程助手的正确打开方式
人工智能·后端
H_老邪1 小时前
spring boot 学习之路-1.0
spring boot·后端·学习
树獭叔叔1 小时前
Claude Code Skill 系统:懒加载的 Agent 行动说明
后端·aigc·openai
Nexzk1 小时前
我把 Hermes Agent 源码扒了个底朝天:它不是“又一个 AI Agent”,而是在认真造一套代理操作系统
后端
袋鱼不重1 小时前
Hermes Agent 安装与实战:从安装到与 OpenClaw 全方位对比
前端·后端·ai编程
写Cpp的小黑黑1 小时前
C++ std::shared_ptr 线程安全性和最佳实践详解
后端
沸点小助手1 小时前
「 AI 整活大赛,正式开擂 & 最近一次面试被问麻了吗」沸点获奖名单公示|本周互动话题上新🎊
前端·人工智能·后端
何陋轩1 小时前
消息队列Kafka与RabbitMQ深度解析:把分布式消息核心讲透,吊打面试官
redis·后端
青Cheng序员石头1 小时前
龙虾运行时安全部署 | NVIDIA NemoClaw 深度研究报告
后端·aigc·nvidia