修复无效的JSON文档。
在最小演示中试用:https://josdejong.github.io/jsonrepair/
在功能齐全的应用程序中使用:https://jsoneditoronline.org
阅读背景文章"如何轻松修复和验证JSON"
可以修复以下问题:
"..."
)替换为常规双引号None
、True
和False
替换为null
、true
和false
/* ... */
和// ...
[1, 2, 3, ...]
callback({ ... })
{\"stringified\": \"content\"}
NumberLong(2)
和ISODate("2012-12-19T06:01:17.171Z")
"long text" + "more text on next line"
{ "id": 1, "name": "John" }
{ "id": 2, "name": "Sarah" }
jsonrepair
库支持流式处理,可以处理无限大的文档。
$ npm install jsonrepair
注意在lib
文件夹中有ESM、UMD和CommonJs的构建版本。
使用ES模块导入来使用jsonrepair
函数:
import { jsonrepair } from 'jsonrepair' try { // 以下是无效的JSON:它由从JavaScript代码库复制的JSON内容组成, // 其中键缺少双引号,并且字符串使用单引号: const json = "{name: 'John'}" const repaired = jsonrepair(json) console.log(repaired) // '{"name": "John"}' } catch (err) { console.error(err) }
在Node.js中使用流式API:
import { createReadStream, createWriteStream } from 'node:fs' import { pipeline } from 'node:stream' import { jsonrepairTransform } from 'jsonrepair/stream' const inputStream = createReadStream('./data/broken.json') const outputStream = createWriteStream('./data/repaired.json') pipeline(inputStream, jsonrepairTransform(), outputStream, (err) => { if (err) { console.error(err) } else { console.log('done') } }) // 或者使用.pipe()代替pipeline(): // inputStream // .pipe(jsonrepairTransform()) // .pipe(outputStream) // .on('error', (err) => console.error(err)) // .on('finish', () => console.log('done'))
在CommonJS中使用(不推荐):
const { jsonrepair } = require('jsonrepair') const json = "{name: 'John'}" console.log(jsonrepair(json)) // '{"name": "John"}'
在浏览器中使用UMD(不推荐):
<script src="/node_modules/jsonrepair/lib/umd/jsonrepair.js"></script> <script> const { jsonrepair } = JSONRepair const json = "{name: 'John'}" console.log(jsonrepair(json)) // '{"name": "John"}' </script>
通过PythonMonkey
在Python中使用。
通过npm install jsonrepair
安装jsonrepair
通过pip install pythonmonkey
安装PythonMonkey
在Python脚本中使用这些库:
import pythonmonkey jsonrepair = pythonmonkey.require('jsonrepair').jsonrepair json = "[1,2,3," repaired = jsonrepair(json) print(repaired) # [1,2,3]
您可以将jsonrepair
作为函数或流式转换使用。将损坏的JSON传递给函数,函数要么返回修复后的JSON,要么在遇到无法解决的问题时抛出JSONRepairError
异常。
// @throws JSONRepairError jsonrepair(json: string) : string
流式API可在jsonrepair/stream
中使用,可用于Node.js流。它包含一个可在流管道中使用的转换函数。
jsonrepairTransform(options?: { chunkSize?: number, bufferSize?: number }) : Transform
选项chunkSize
决定了转换输出的块大小,默认为65536
字节。更改chunkSize
可能会影响性能。
选项bufferSize
决定了在内存中保留的输入和输出流的字节数,默认也是65536
字节。此缓冲区用作输入和输出的"移动窗口"。这是必要的,因为jsonrepair
必须向前或向后查看以确定要修复的内容,有时必须回溯生成的输出以插入缺失的逗号。bufferSize
必须大于JSON数据中最长字符串和空白的长度,否则在处理数据时会抛出错误。将bufferSize
设置得很大会导致更多的内存使用和性能下降。
当使用npm全局安装jsonrepair
时,可以在命令行中使用它。要全局安装jsonrepair
:
$ npm install -g jsonrepair
用法:
$ jsonrepair [filename] {OPTIONS}
选项:
--version, -v 显示应用程序版本
--help, -h 显示此消息
--output, -o 输出文件
--overwrite 覆盖输入文件
--buffer 缓冲区大小(字节),例如64K(默认)或1M
使用示例:
$ jsonrepair broken.json # 修复文件,输出到控制台
$ jsonrepair broken.json > repaired.json # 修复文件,输出到文件
$ jsonrepair broken.json --output repaired.json # 修复文件,输出到文件
$ jsonrepair broken.json --overwrite # 修复文件,替换文件本身
$ cat broken.json | jsonrepair # 从输入流修复数据
$ cat broken.json | jsonrepair > repaired.json # 从输入流修复数据,输出到文件
类似的库: