1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2019 年 1 月 26 日 |
---|
#1491 in 编码
813 每月下载量
在 5 crates 中使用
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 的分支,它保留了原始许可证,这意味着它可以在以下任一许可证下使用:
- Apache License,版本 2.0,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任由您选择。
贡献
除非您明确声明,否则您提交给 serde_jsonrc 以供包含在内的任何贡献,根据 Apache-2.0 许可证的界定,将根据上述许可证双许可,不附加任何额外的条款或条件。
依赖关系
~240–650KB
~13K SLoC