如何在MySQL中实现JSON最小化(去除冗余空格)?
MySQL JSON 紧凑化(JSON_PRETTY 反向操作)
需求说明
MySQL 提供的 JSON_PRETTY() 函数可以将 JSON 格式化为带换行、空格的易读形式,现在需要实现反向操作:将格式化后的 JSON 转换为无冗余空格的紧凑格式,且仅通过 MySQL 内置命令实现,不依赖应用层处理。
解决方案
核心思路是利用 MySQL 对 JSON 类型的解析特性:将带格式的 JSON 字符串转换为 JSON 类型时,MySQL 会自动剔除语法冗余的空格、换行符,再转换回字符串即可得到紧凑格式的 JSON,同时会保留 JSON 值内部的合法空格(比如字符串 "hello world" 中的空格不会被删除)。
场景1:处理 JSON 类型列的格式化结果
如果你的列是原生 JSON 类型,直接查询该列默认返回的就是紧凑格式;若要将 JSON_PRETTY() 的输出转回紧凑格式,可按以下方式查询:
-- 获取格式化后的JSON SELECT json_pretty(jsonPara) AS formatted_json FROM MY_TABLE; -- 将格式化结果转换为紧凑格式 SELECT CAST(CAST(json_pretty(jsonPara) AS JSON) AS CHAR) AS minimized_json FROM MY_TABLE;
场景2:处理存储为文本类型的格式化JSON
如果你的 JSON 是存储在 TEXT/VARCHAR 列中的格式化字符串,同样通过类型转换实现紧凑化:
-- formatted_json_col 是存储格式化JSON的文本列 SELECT CAST(formatted_json_col AS JSON) AS minimized_json FROM MY_TABLE;
示例验证
以你提供的测试数据为例:
INSERT INTO MY_TABLE(jsonPara) VALUES ('{"lamp": "hello world", "chair": "5"}'); -- 同时查看原JSON、格式化JSON、紧凑化JSON SELECT jsonPara AS original_json, json_pretty(jsonPara) AS formatted_json, CAST(CAST(json_pretty(jsonPara) AS JSON) AS CHAR) AS minimized_json FROM MY_TABLE;
输出的 minimized_json 即为目标结果:{"lamp":"hello world","chair":"5"}
内容的提问来源于stack exchange,提问作者Ankit Prakash
相关产品推荐
相关产品推荐

