需分步处理:先用正则提取字段与值列表,再逐项配对转json;字符串需手动转义单引号、统一引号格式,数字不加引号,null转小写null。

SQL INSERT 语句里字段名和值怎么对齐成 JSON 键值对
直接用 INSERT INTO table (a, b, c) VALUES ('x', 1, NULL) 这类语句,没法靠一次正则就生成合法 JSON——因为字段名和值类型不一致(字符串要加引号、NULL 要转 null、数字不能加引号),且括号/逗号/空格分布不规则。必须分步处理,先提取结构,再逐项转换。
推荐做法:用两轮正则替换,第一轮把 INSERT 拆成字段列表 + 值列表,第二轮把每组字段+值配对转成 "key": value 形式。
- 第一轮用
^\s*INSERT\s+INTO\s+\w+\s*\(([^)]+)\)\s*VALUES\s*\(([^)]+)\)\s*;$捕获字段和值,替换为{\n$1\n=>\n$2\n}(仅作中间格式,方便人工核对) - 确保 SQL 中字段名和值数量严格一致,否则后续配对会错位;遇到换行或缩进,需在正则中加入
\s*容忍空白 - Sublime 的正则引擎不支持条件匹配或回调函数,所以无法自动判断某值是字符串还是数字——必须靠人工或预处理统一引号
怎么把单引号包裹的字符串值转成 JSON 字符串(含转义)
SQL 里 'O''Reilly' 或 'path/to\"file' 这类带转义的字符串,在 JSON 中要变成 "O'Reilly" 和 "path/to\"file"。Sublime 不支持动态转义,只能靠固定规则替换:
- 先全局替换
''(两个单引号)为'(一个单引号),因为 SQL Server/PostgreSQL 用它表示字面单引号 - 再替换所有未被转义的
'为",但注意别碰已有的双引号或反斜杠前的单引号——可先用(? 匹配非转义单引号,替换为 <code>" - 最后处理内部引号:用
"(?=[^"]*'"这类前瞻不可靠,稳妥做法是手动检查或导出后用 Python 处理;Sublime 里建议只做基础清洗,复杂转义留到脚本阶段
NULL、TRUE、FALSE 怎么转成小写 JSON 字面量
SQL 的 NULL、TRUE、FALSE 必须转成 null、true、false 才是合法 JSON。大小写敏感,且不能加引号。
- 顺序很重要:先替换
NULL,再替换TRUE和FALSE,避免TRUE被TRU类误伤 - 用单词边界
\bNULL\b防止把NOT NULL中的NULL单独替换成not null;同理用\bTRUE\b、\bFALSE\b - 如果 SQL 中混用大小写(如
Null、True),需开启 Sublime 的「Match Case」开关,或分别建多条替换规则
最终拼成 JSON 对象时,怎么避免逗号错误和括号嵌套混乱
从字段/值列表生成键值对后,合并成 JSON 对象容易在末尾多逗号、少括号,或字段名没加引号(JSON 要求所有 key 必须是字符串)。
- 字段名一律用
"$1":格式包裹,别漏掉开头结尾的双引号;值部分根据类型决定是否加引号(数字、null、true、false不加) - 用
^\s*(\w+)\s*,?\s*$匹配字段行,替换为"$1": $2,(其中$2是对应值),再手动删最后一行逗号 - Sublime 没有「按列选择后批量编辑」的智能补全,所以不要依赖自动加逗号;建议生成后粘贴到 VS Code 或 JSONLint 验证格式
真正麻烦的不是正则本身,而是 SQL 数据本身的不规范:混合类型、缺失值、嵌套括号、注释干扰。这类转换一旦字段数超过 5 个,手写正则出错率陡增,不如写个 10 行 Python 脚本读取 SQL 文件并输出 JSON——正则适合修修补补,不适合当数据转换主力。











