sublime没有真正安全的“一键合并多行json”功能,ctrl+j会机械删换行致解析失败,必须区分场景、限定范围、手动干预换行和引号边界。

Sublime 没有真正安全的“一键合并多行 JSON”功能,Ctrl+J 直接用在 JSON 上大概率破坏结构,必须区分场景、限定范围、手动干预换行和引号边界。
Ctrl+J 合并 JSON 为什么会报错
它不识别 JSON 语法,只机械地删换行符+加空格。常见崩坏现象包括:
- 把
{和"key":挤到同一行,但漏掉逗号或缩进,导致解析失败 - 把
"value"后的换行直接删掉,变成"value""next_key",字符串拼接错误 - 遇到行尾注释(如
// comment)会连成// comment"next",JSON 非法 - 对数组元素(如
["a",换行"b"])执行 Ctrl+J,会产出["a","b"]看似正确,但若中间有空行或缩进不一致,结果不可靠
正则替换 JSON 数组为单行字符串
目标是把 ["a", "b", "c"] 这类多行数组转成合法单行,关键在锚定引号内容、避开括号和逗号干扰:
- 先手动选中整个数组块(从
[到],含所有引号内值) - 打开
Ctrl+H,勾选.*(启用正则),确保右下角. matches newline未勾选 - 查找:
^\s*"→ 替换为:"(清理每行开头缩进) - 查找:
\s*(?=")→ 替换为:","(匹配引号前的空白+换行,补逗号分隔) - 最后手动补上首尾
[和];检查是否多出逗号(如末尾",")
处理 JSON 字符串值内的换行(非结构换行)
当 JSON 字段值本身含真实换行(如 "log": "line1\nline2"),要保留语义而非破坏结构:
- 不能搜
\n直接替——Windows 是\r\n,Unix 是\n,只搜一个会漏 - 查找:
\r?\n→ 替换为:\n(转义成 JSON 字符串内换行符)或(空格,仅当语义允许) - 替换前统一换行符:
File → Line Endings → Unix,避免\r?\n匹配失效 - 如果目标是压缩日志字段为单行可读文本(如
"log": "line1 line2"),才用空格替换;否则必须用\n
真正省事的前提:别依赖“一键”,先做三件事
几乎所有 JSON 合并翻车,都卡在前期没清理干净:
- 用
Ctrl+Shift+P → TrailingSpaces: Remove from current view清掉所有行尾空格——否则"a" \n "b"会变成"a" "b"(两个空格) - 删空行:
Ctrl+H正则开,查找^\s*$\n,替换为空,避免空行变多余空格 - 确认文件编码是 UTF-8,且无 BOM;粘贴自 Excel 或网页的 JSON 常带隐藏字符,
Ctrl+Shift+P → Convert to UTF-8再操作
JSON 不是纯文本,它的换行是语法的一部分。所谓“合并”,本质是精确控制哪些换行该删、哪些该留、哪些该转义——没有跳过这步的捷径。











