Project Icon

jsonrepair

强大的JSON文档修复和验证工具

jsonrepair是一个专业的JSON文档修复工具,能够自动处理多种常见JSON错误。该库支持流式处理大型文档,适用于浏览器和Node.js环境。jsonrepair提供简洁的API和命令行界面,方便开发者高效修复和验证JSON数据。其功能包括添加缺失元素、修复截断JSON、替换引号等,为JSON数据处理提供全面解决方案。

jsonrepair

修复无效的JSON文档。

在最小演示中试用:https://josdejong.github.io/jsonrepair/

在功能齐全的应用程序中使用:https://jsoneditoronline.org

阅读背景文章"如何轻松修复和验证JSON"

可以修复以下问题:

  • 为键添加缺失的引号
  • 添加缺失的转义字符
  • 添加缺失的逗号
  • 添加缺失的闭合括号
  • 修复截断的JSON
  • 将单引号替换为双引号
  • 将特殊引号字符(如"...")替换为常规双引号
  • 将特殊空白字符替换为常规空格
  • 将Python常量NoneTrueFalse替换为nulltruefalse
  • 删除尾随逗号
  • 删除注释,如/* ... */// ...
  • 删除数组和对象中的省略号,如[1, 2, 3, ...]
  • 删除JSONP表示法,如callback({ ... })
  • 从转义字符串中删除转义字符,如{\"stringified\": \"content\"}
  • 删除MongoDB数据类型,如NumberLong(2)ISODate("2012-12-19T06:01:17.171Z")
  • 连接字符串,如"long text" + "more text on next line"
  • 将换行分隔的JSON转换为有效的JSON数组,例如:
    { "id": 1, "name": "John" }
    { "id": 2, "name": "Sarah" }
    

jsonrepair库支持流式处理,可以处理无限大的文档。

安装

$ npm install jsonrepair

注意在lib文件夹中有ESM、UMD和CommonJs的构建版本。

使用

ES模块

使用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)
}

流式API

在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

在CommonJS中使用(不推荐):

const { jsonrepair } = require('jsonrepair')
const json = "{name: 'John'}"
console.log(jsonrepair(json)) // '{"name": "John"}'

UMD

在浏览器中使用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>

Python

通过PythonMonkey在Python中使用。

  1. 通过npm install jsonrepair安装jsonrepair

  2. 通过pip install pythonmonkey安装PythonMonkey

  3. 在Python脚本中使用这些库:

    import pythonmonkey
    
    jsonrepair = pythonmonkey.require('jsonrepair').jsonrepair
    
    json = "[1,2,3,"
    repaired = jsonrepair(json)
    print(repaired) 
    # [1,2,3]
    

API

常规API

您可以将jsonrepair作为函数或流式转换使用。将损坏的JSON传递给函数,函数要么返回修复后的JSON,要么在遇到无法解决的问题时抛出JSONRepairError异常。

// @throws JSONRepairError 
jsonrepair(json: string) : string

流式API

流式API可在jsonrepair/stream中使用,可用于Node.js流。它包含一个可在流管道中使用的转换函数。

jsonrepairTransform(options?: { chunkSize?: number, bufferSize?: number }) : Transform

选项chunkSize决定了转换输出的块大小,默认为65536字节。更改chunkSize可能会影响性能。

选项bufferSize决定了在内存中保留的输入和输出流的字节数,默认也是65536字节。此缓冲区用作输入和输出的"移动窗口"。这是必要的,因为jsonrepair必须向前或向后查看以确定要修复的内容,有时必须回溯生成的输出以插入缺失的逗号。bufferSize必须大于JSON数据中最长字符串和空白的长度,否则在处理数据时会抛出错误。将bufferSize设置得很大会导致更多的内存使用和性能下降。

命令行界面(CLI)

当使用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  # 从输入流修复数据,输出到文件

替代方案:

类似的库:

开发

在实现修复或新功能时,重要的是要知道目前有两种实现:

  • src/regular 这是一个非流式实现。代码量小,适用于最大512MB的文件,非常适合在浏览器中使用。
  • src/streaming 可在Node.js中使用的流式实现。代码量更大,更复杂,实现使用可配置的bufferSizechunkSize。当解析的文档包含长度超过配置的bufferSize的字符串或数字时,库将抛出"索引超出范围"错误,因为它无法在缓冲区中保存完整的字符串。当配置为无限缓冲区大小时,流式实现的工作方式与常规实现相同。在这种情况下,不会出现此范围错误,但会降低性能,并且应用程序在修复大型文档时可能会耗尽内存。

这两种实现都通过src/index.test.ts中的相同单元测试套件进行测试。

脚本:

脚本描述
npm install一次性安装依赖项
npm run build构建库(ESM、CommonJs和UMD输出到lib文件夹)
npm test运行单元测试
npm run lint运行代码检查器(eslint)
npm run format自动修复代码检查问题
npm run build-and-test运行代码检查器、构建所有内容,并运行单元测试和集成测试
npm run release发布新版本。这将进行代码检查、测试、构建、增加版本号、将更改推送到git、添加git版本标签并发布npm包。
npm run release-dry-run运行所有发布步骤并查看更改列表,但不实际发布

许可证

根据ISC许可证发布。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号