sublime text可用正则"(1+)"\s:提取json所有键名,替换为"$1",;需勾选regex、关闭自动补全;顶层键可配合折叠或^\s"(1+)"\s*:;最后补方括号、删末逗号得合法js数组。" ↩

用正则批量提取 JSON 键名(Sublime 原生支持)
Sublime Text 本身不带“JSON 键转数组”按钮,但靠自带的正则查找替换就能一步到位。关键不是写新插件,而是找准键名在 JSON 中的文本模式。
常见错误是直接搜 "\w+": —— 这会漏掉带中划线、数字开头、空格或 Unicode 的键(比如 "user-id"、"2fa_enabled"、"昵称"),也会误中字符串值里的引号内容。
- 正确正则模式:
"([^"]+)"\s*:(匹配所有双引号包裹、后紧跟冒号的键名) - 替换为:
"$1",(保留引号,加英文逗号,方便后续拼成数组) - 务必勾选 Regex 和 JSON 模式下关闭自动补全(避免替换时触发格式化把换行吃掉)
处理嵌套对象和数组边界(避免多层键名混在一起)
如果 JSON 里有嵌套对象或数组,比如 {"user": {"name": "a", "age": 20}},默认正则会把 "user"、"name"、"age" 全提出来——但你可能只要顶层键。
这时得靠 Sublime 的 折叠功能辅助限定范围:先折叠所有子对象(Ctrl+Shift+[),再对展开的顶层做查找替换;或者用更保守的正则:^\s*"([^"]+)"\s*:(加 ^ 和 \s* 确保是行首缩进后的键)。
- 嵌套越深,纯正则越难区分层级——别硬刚,先手动折叠再操作更稳
- 如果目标是“所有键(无论层级)”,就用第一个正则,但替换后要人工删重复项
- 注意数组项(
[{...}, {...}])内部的键也会被扫到,如不需要,提前删掉数组部分或加负向断言(但 Sublime 正则不支持(?!...),慎用)
生成合法 JavaScript 数组(补括号、去末尾逗号)
替换完得到一堆 "key1", "key2", "key3",,但末尾多一个逗号,直接粘贴进 JS 会报 SyntaxError: Unexpected token ','。
- 替换第二步:搜
,\s*$(行尾逗号),替为空,解决语法错误 - 再手动在开头加
[",结尾加"],或用多光标:按住Ctrl点两头,输入括号 - 如果键名含双引号或反斜杠(极少见但 JSON 允许),
"([^"]+)"会截断——此时必须改用 JSON 解析器,Sublime 正则无解
为什么不用在线工具或 Python 脚本?
临时处理小 JSON(几百行内),Sublime 正则比切窗口、粘贴、等加载、再复制快得多。但一旦遇到以下情况,就该停手换工具:
- JSON 格式不合法(缺引号、注释、尾逗号)——Sublime 查找不报错,但结果错得无声无息
- 需要过滤键名(比如只要以
is_开头的)、或按值类型筛选(只提 string 类型的键)——正则做不到语义判断 - 要批量处理多个文件——写个
jq命令一行搞定:jq 'paths(scalars) | select(length > 0) | join(".")' file.json
真正卡住人的往往不是正则怎么写,而是没意识到 JSON 文本里那些看似无关的空格、换行、注释,会让 "([^"]+)"\s*: 匹配失败——建议先用 Ctrl+Shift+P → JSON: Reindent 整理格式再动手。










