告别手写正则删注释:为什么strip-json-comments才是处理JSONC的唯一正确选择
【免费下载链接】strip-json-commentsStrip comments from JSON. Lets you use comments in your JSON files!项目地址: https://gitcode.com/gh_mirrors/st/strip-json-comments
strip-json-comments是一个轻量级 Node.js 开源工具:只要一行代码,就能把 JSON 字符串里的//单行注释和/* */多行注释干净移除,让你的JSONC(带注释的 JSON)配置可以被JSON.parse正常解析。对于被.vscode/settings.json、tsconfig.json这类"带注释配置"折磨过的新手来说,它是绕不开的一个依赖。
为什么 JSON 里不能直接写注释?
JSON 规范不允许注释。你在配置文件里随手写一句// 这是主题色,JSON.parse立刻抛出SyntaxError。
于是大家习惯手写一条正则"救急":
const clean = raw.replace(/\/\/.*$/gm, '');听起来很爽,但这类正则删注释方案有三个经典翻车现场:
- 💥误伤字符串:
"homepage": "https://example.com"里的//也会被删掉,数据直接损坏; - 💥多行注释无力:
/* ... */跨越多行时,单行正则根本接不住; - 💥位置漂移:删掉字符后行号错乱,报错时你完全找不到问题出在第几行。
strip-json-comments 存在的意义,就是让你彻底告别这种"手搓正则"的冒险。
三步安装并使用 JSON 注释剥离工具
⚡ 它零依赖、支持 Node.js ≥ 14.16,并且自带 TypeScript 类型定义,安装即用:
npm install strip-json-commentsimport stripJsonComments from 'strip-json-comments'; import { readFileSync } from 'node:fs'; const raw = readFileSync('settings.jsonc', 'utf8'); const data = JSON.parse(stripJsonComments(raw));三步完成:装包 → 读文件 → 剥注释后解析。仓库根目录的 示例数据 就是现成的练手素材:里面混着//行注释和多行块注释,剥完之后可以直接丢给JSON.parse。
两个选项:让 JSONC 配置更宽容
调用时可以传入第二个参数,两个选项都很实用:
| 选项 | 默认值 | 作用 |
|---|---|---|
trailingCommas | false | 顺便移除尾逗号("a": 1,这种),对 JSONC 极其友好 |
whitespace | true | 把注释替换成空白而不是直接删掉 |
第二个选项藏着作者的一点小心机 ✅ 替换成空白后,处理前后行号和列号几乎一一对应。也就是说:如果解析后还报错了,错误信息指向的行号依然能直接定位到原始文件,调试体验大大提升。
JSON.parse(stripJsonComments(raw, { trailingCommas: true }));为什么它比手写正则可靠?
核心逻辑全部在不到 120 行的 主程序文件 里,用一个状态机逐字符扫描,专门处理了正则难以覆盖的边界情况:
- 🔒字符串内保护:值里的
//、/* */一律不碰(包括https://这种 URL); - 🔒转义引号识别:字符串里出现
\"也不会误判字符串边界; - 🔒换行符兼容:Windows 的
\r\n和 Unix 的\n都能正确处理; - 🔒文件末尾注释:EOF 处戛然而止的单行注释也不会出问题。
这些场景在 测试文件 里都有对应用例覆盖,跑一遍npm test就能看到全绿的边界测试。
更硬核的是性能:仓库附带 基准脚本,用超过 2.7 万行的泰坦尼克号乘客数据集 大样例文件 做压力对比,处理几十万行带注释的 JSONC 也毫无压力。
适合哪些实际场景?
- 🛠️ 在脚本里读取 VS Code 的
settings.json、tsconfig.json等 JSONC 配置文件; - 🛠️ 处理团队内部"约定俗成带注释"的 JSON 数据文件;
- 🛠️ 配合 Gulp / Grunt / Broccoli 构建流程,在打包前批量清洗注释(均有对应插件)。
想深入看看源码?克隆仓库即可,核心就一个文件,新手也能十分钟读完:
git clone https://gitcode.com/gh_mirrors/st/strip-json-comments小结
手写正则删注释是"能用但危险"的捷径;而strip-json-comments用极小的代码量,换来了字符串保护、错误位置对齐、尾逗号清洗这些开箱即用的能力。处理JSONC、剥离 JSON 注释这件事,交给它,就对了。
【免费下载链接】strip-json-commentsStrip comments from JSON. Lets you use comments in your JSON files!项目地址: https://gitcode.com/gh_mirrors/st/strip-json-comments
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考