@croct/json5-parser

中文文档
0.2.2发布于 2025/12/01MITTypeScriptCommonJS近 30 天下载 384.4万

用于维持缩进、间隔和注释的JSON5标注器和解析器.

中文使用文档
文档目录10 节
  1. 概览
  2. 主要特点
  3. 安装
  4. 使用量
  5. 定 法
  6. 分析
  7. 操纵
  8. 格式化
  9. 捐款
  10. 测试

Croct
JSON5 解析器
用于维持缩进、间隔和注释的JSON5标注器和解析器.

Version Build

* 释放 • 妇女 QQ 报告错误 • 妇女 请求特性

概览

这个库提供了一个 API ,用于与 JSON 和 杰森5号 文档,同时保留其原始结构和格式. 与使用抽象语法树(AST)和丢弃格式的传统JSON解析器不同,这个库利用了混凝土语法树(CST)来保留每一个细节——注释,缩进和白空格.

理想编辑配置文件(例如, package.json, (中文(简体) ), tsconfig.json)或任何用户生成的JSON5内容,此库确保格式化在整个修改过程中保持不变.

主要特点

  • 保留格式化 – 在不丢失注释,缩进或间隔的情况下读取,修改,并写入JSON5文件.
  • 样式学习 – 将文档现有的格式样式自动应用于新条目.
  • 重新编排格式 – 自定义带有灵活选项的输出格式.
  • 类型安全 – Fully 为JSON5文档的工作输入了API.

安装

通过 国家预防机制数字 :

npm install @croct/json5-parser

使用量

库提供了一个简单的API,用于解析,操纵,并串行JSON5文档.

定 法

通常,你不需要直接与Lexer互动. 然而,您可以使用它来表示一个JSON5文档:

import {JsonLexer} from '@croct/json5-parser';

const tokens = JsonLexer.tokenize(
    `{
        // Comment
        "name": "John Doe",
        "age": 42,
    }`
);

分析

要分析 JSON5 文件 :

import {JsonParser} from '@croct/json5-parser';

const node = JsonParser.parse(
    `{
        // Comment
        "name": "John Doe",
        "age": 42,
    }`
);

可选地指定要缩小结果的根节点类型 :

import {JsonParser, JsonObjectNode} from '@croct/json5-parser';

const node = JsonParser.parse(
    `{
        // Comment
        "name": "John Doe",
        "age": 42,
    }`,
    JsonObjectNode
);

操纵

保留格式时修改值 :

// Get the value of a property
const name = node.get('name').toJSON();

// Update a property
node.set('age', 43);

console.log(node.toString());

新条目采用文档的现有样式 :

node.set('country', 'USA');

console.log(node.toString());

输出 :

{
    // Comment
    "name": "John Doe",
    "age": 43,
    "country": "USA",
}

格式化在块级应用,在同一文档中处理不同的样式:

{
  "name": "My Project",
  "version": "1.0.0",
  "keywords": ["json5", "parser"],
}

添加数组项时保留现有格式 :

node.set('stack', ['react', 'typescript']);

输出 :

{
  "name": "My Project",
  "version": "1.0.0",
  "keywords": ["json5", "parser"],
  "stack": ["react", "typescript"],
}

要重置格式并应用新样式:

node.reset();

console.log(node.toString({/* formatting options */}));

输出 :

{
  "name": "My Project",
  "version": "1.0.0",
  "keywords": [
    "json5",
    "parser"
  ],
  "stack": [
    "react",
    "typescript"
  ]
}

参见 格式化 关于现有选项的详情.

要在保存格式化的同时更新文档,请使用 update 方法 :


node.update({
    ...node.toJSON(),
    "version": "2.0.0",
});

这个 update 方法将新内容与现有文档相协调,保留注释、缩进和间隔.

对于单个更新,宁可 set 提高性能的方法:

node.set('version', '2.0.0');

要合并两个文档,同时保留这两个文档的评论和格式,请使用 merge 方法 :


const destinationCode = `{
  // Destination pre-foo comment
  "foo": "value",
  // Destination post-foo comment
  "baz": [1, 2, 3]
}
`;

const sourceCode = `{
  /* Source pre-bar comment */
  "bar": 123, /* Inline comment */
  /* Source post-bar comment */
  "baz": true /* Another inline comment */
}
`;

const source = JsonParser.parse(sourceCode, JsonObjectNode);
const destination = JsonParser.parse(destinationCode, JsonObjectNode);

destination.merge(source)

console.log(destination.toString());

输出 :

{
  // Destination pre-foo comment
  "foo": "value",
  /* Source pre-bar comment */
  "bar": 123, /* Inline comment */
  /* Source post-bar comment */
  "baz": true /* Another inline comment */
}

格式化

当你打电话 toString(options) 您可以控制输出格式化. 如果一个选项被省略,则格式从当前文档中学习并保持其样式。 如果无法推断出风格, 格式重回紧凑的样式,没有额外的空格或缩进.

选项

选项类型/价值说明
indentationLevelnumber文档的基缩进级.
indentationCharacter'space'|'tab'缩进所用的字符 .
lineEnding'lf'|'crlf'在文档中使用的新行序列 .
string.quote'single'|'double'字符串值的引号样式.
property.quote'single'|'double'属性密钥的引号样式 .
property.unquotedboolean有效时允许未引用的属性密钥 .
array.indentationSizenumber数组条目缩进大小 .
array.trailingIndentationboolean在新线上收缩括号.
array.leadingIndentationboolean缩进打开新线上的括号.
array.entryIndentationboolean每个数组条目缩进 .
array.trailingCommaboolean在最后一个条目后添加一个后缀.
array.commaSpacingboolean在数组中逗号后添加空格 .
array.colonSpacingboolean在阵列中,在冒号后添加空格(对于内含的对象).
object.indentationSizenumber对象属性缩进大小 .
object.trailingIndentationboolean缩进关闭新线上.
object.leadingIndentationboolean缩进打开新线上的保险套.
object.entryIndentationboolean缩进每个对象属性.
object.trailingCommaboolean在最后一个属性后添加后缀逗号 .
object.commaSpacingboolean在对象中逗号后添加空格.
object.colonSpacingboolean在对象中以冒号后添加空格.

快速食谱

这里有一些常见的格式样式,通过结合不同的选项可以实现.

1) 紧凑的单行数组; 漂亮的多行对象
node.toString({
    array: {
        leadingIndentation: false,   // keep arrays inline
        trailingIndentation: false,
        trailingComma: false,
        commaSpacing: true,
    },
    object: {
        entryIndentation: true,      // multi-line objects
        leadingIndentation: true,    
        trailingIndentation: true,
        indentationSize: 2,
        trailingComma: true,
        commaSpacing: true,
        colonSpacing: true,
    },
});

输出样式 :

{
  "name": "My Project",
  "keywords": ["json5", "parser"], // array kept inline
  "deps": {
    "typescript": "^5.6.0",       // multi-line object
    "vite": "^5.4.0",
  }
}
2) 各地的标签,单引号,仅在必要时引用属性
node.toString({
  indentationCharacter: 'tab',
  string: {
      quote: 'single'
  },
  property: {
      quote: 'single', 
      unquoted: true
  },
  object: {
    leadingIndentation: true,
    entryIndentation: true,
    trailingIndentation: true,
    trailingComma: false,
    commaSpacing: true,
    colonSpacing: true,
  },
});

输出样式 :

{
    foo: 'bar',
    items: [
        'a',
        'b'
    ]
}
3) 严格的紧凑样式( 逗号/ 冒号后没有空格)
node.toString();

输出样式 :

{"a":1,"b":[1,2,3]}

捐款

欢迎捐款!

测试

安装依赖性 :

npm install

运行测试 :

npm run test

要检查样式问题的 Lint 代码 :

npm run lint

版本与发布记录

@croct/json5-parser 共发布 5 个版本,首次发布于 2025/03/01;过去 12 个月发布了 1 个版本。

版本发布日期距今
0.2.2latest2025/12/0111 个月前
0.2.12025/08/291.2 年前
0.2.02025/08/281.2 年前
0.1.12025/05/171.5 年前
0.1.02025/03/011.7 年前

关于 @croct/json5-parser 的常见问题

@croct/json5-parser 是什么?

用于维持缩进、间隔和注释的JSON5标注器和解析器.

如何安装 @croct/json5-parser?

在项目目录运行 npm install @croct/json5-parser,或使用 pnpm add / yarn add / bun add。

@croct/json5-parser 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@croct/json5-parser 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@croct/json5-parser 可以商用吗?

@croct/json5-parser 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@croct/json5-parser 的下载量有多少?

根据 npm 官方下载统计,@croct/json5-parser 在 2026/10/11 – 2026/11/09 这 30 天内被下载 3,843,654 次,日均约 128,122 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@croct/json5-parser 还在维护吗?

最新版本 0.2.2 发布于 2025/12/01(11 个月前);至今共发布 5 个版本,其中过去 12 个月发布了 1 个;首次发布于 2025/03/01。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。