1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2019 年 1 月 26 日

#1491 in 编码

Download history 257/week @ 2024-04-28 153/week @ 2024-05-05 148/week @ 2024-05-12 296/week @ 2024-05-19 143/week @ 2024-05-26 193/week @ 2024-06-02 185/week @ 2024-06-09 186/week @ 2024-06-16 182/week @ 2024-06-23 111/week @ 2024-06-30 193/week @ 2024-07-07 238/week @ 2024-07-14 194/week @ 2024-07-21 201/week @ 2024-07-28 184/week @ 2024-08-04 214/week @ 2024-08-11

813 每月下载量
5 crates 中使用

MIT/Apache

385KB
9K SLoC

serde_jsonrc

这是一个从 serde_json crate 分支出来的宽容 JSON 解析器,旨在解析人类编写的 JSON(例如,JSON 配置文件)。这意味着它支持

  • /*// 风格的注释。
  • 对象和数组字面量后面的逗号。
  • [计划] 不带引号的对象键(具体规范待定)。

我仍在尝试使其更加宽容,这可能包括从 JSON5 规范中获取更多功能。

动机

当我创建这个 crate 时,我的首要目标是创建一个用于工作项目的配置文件快速解析器。我希望文件格式对开发者来说既熟悉又对接受的格式有限制。在我的职业生涯中,我多次遇到过这个问题,总是面临相同的权衡

  • JSON:由于不支持注释和尾随逗号,使用起来不够方便。
  • YAML:输入语言有太多功能。
  • TOML:使用还不够广泛,以至于我不会将其视为“对开发者来说很熟悉”。此外,嵌套对象要么很冗长,要么与 JSON 类似。

在考虑这些选项的相对缺点时,很明显,我真正想要的是更宽容的 JSON。接下来的问题是如何获得一个宽容的 JSON 解析器(在我的情况下是在 Rust 中)。我考虑了以下选项

使 serde_json 宽容

这是我首先的选择,但 维护者希望将 serde_json 的范围限制为严格的 JSON,因此我们尊重地同意分支是可行的。

json5 crate

json5 crate 支持在 https://json5.org/ 指定的 JSON 的超集。从理论上讲,功能集满足了我的需求,但在实践中,我发现其实施的性能远不如 serde_json,即使是对于小型文件。此外,它不能解析流:只能解析字符串。

serde-hjson crate

serde-hjson crate 提供了一个名为 Hjson 的不同 JSON 超集的解析器(“为人类设计的 JSON”)。我并不是 Hjson 的粉丝,因为它所接受的语言不是有效的 JavaScript,所以它不像 JSON 那么直观。

长期目标

最终,我希望看到一个比 JSON 更宽容的形式得到标准化,并像今天的 JSON 一样普及。我希望这个 crate 成为那个新、更宽容规范的一个参考实现。

我认为,在规范中更保守地添加新功能,最有希望获得广泛的认可,这就是为什么我并没有立即倾向于实现所有的 JSON5。相反,我从2011年提出的 对 JSON 的建议改进 开始。

最后,我的直觉告诉我,新的 JSON 版本仍然应该是有效的 JavaScript。例如,JSON 当前的一个缺点是缺乏对多行字符串的支持。JSON5 通过允许使用 \ 来延续行来解决这一点,但在这个阶段,我认为反引号(`)将是一个更直观的解决方案,因为它将与 ES6 一致(尽管不支持字符串插值)。

许可证

因为 serde_jsonrc 是 serde_json 的分支,它保留了原始许可证,这意味着它可以在以下任一许可证下使用:

任由您选择。

贡献

除非您明确声明,否则您提交给 serde_jsonrc 以供包含在内的任何贡献,根据 Apache-2.0 许可证的界定,将根据上述许可证双许可,不附加任何额外的条款或条件。

依赖关系

~240–650KB
~13K SLoC