如何自动补全闭合被意外截断的未终止JSON数据?
截断JSON自动补全方案
方法1:使用现成工具快速修复
- 不想写代码可以直接用VS Code插件
JSON Fix,安装后右键点击截断的JSON文件,选择「Fix JSON」即可自动补全所有未闭合的对象、数组、字符串结构,处理MB级的JSON文件也不会卡顿。 - Node.js/前端开发场景可以用
jsonrepair库,直接传入截断的JSON字符串即可返回合法JSON,示例代码如下:
import { repair } from 'jsonrepair' // 输入被截断的JSON const brokenJson = '{"id":123,"data":{"list":[{"name":"test","value":' const fixedJson = repair(brokenJson) // 输出修复后的合法JSON:{"id":123,"data":{"list":[{"name":"test","value":null}]}}
- 命令行场景可以安装
jsonrepair全局工具,执行jsonrepair 待修复文件路径 > 输出文件路径即可批量处理截断JSON。
方法2:手动实现简易补全逻辑(适合定制需求)
如果需要适配业务特殊规则,可以自己写几十行代码实现核心补全能力,逻辑如下:
- 初始化三个状态标记:
objectDepth(对象大括号嵌套深度)、arrayDepth(数组中括号嵌套深度)、inString(是否处于字符串内部的布尔值) - 逐字符遍历截断的JSON内容:
- 遇到未被转义的双引号
"时,翻转inString状态 - 仅当
inString为false时统计括号深度:遇到{则objectDepth +1,遇到}则objectDepth -1;遇到[则arrayDepth +1,遇到]则arrayDepth -1
- 遇到未被转义的双引号
- 遍历结束后先处理未闭合的字符串:如果
inString为true,先在末尾补一个" - 按剩余深度补全闭合括号:有几层
arrayDepth就补几个],有几层objectDepth就补几个} - 如果末尾存在未赋值的键(最后一个非空字符是
:),可以补null作为默认值,避免语法错误
补充提示:如果你的截断JSON存在末尾多余逗号的问题,需要在补全括号前先移除最后一个非空的逗号,避免修复后的JSON仍然不合法。
内容的提问来源于stack exchange,提问作者mikemaccana
相关产品推荐
相关产品推荐

