1 个不稳定版本

0.1.0 2022年5月7日

#141#json-parser

MIT 许可证

84KB

阐释

Crates.io Docs.rs CI Coverage Status

阐释 是一个功能强大的JSON解析器,旨在实现快速、高效和正确。

官方文档可以在 crate的文档 中找到。

项目描述

由于该项目目前处于非常早期的开发阶段,一些事情自然处于变动之中。当前项目的目标是围绕允许最终用户

  • 创建自定义的JSON数据管道
  • 验证和转换JSON数据
  • 安全地处理不受信任的数据,而不会意外执行恶意代码

JSON语法

定义有效JSON语法的规范以及该格式的格式本身可以在 IETF RFC 8259 中找到。

特性路线图

以下列表中的特性是基本的,代表了最小可行产品(MVP)所需的内容。项目的范围有意尽可能地小。

  • 解析RFC 8259中定义的JSON数据类型。
    • 数组
    • 布尔值
    • 空值
    • 数字
    • 对象
    • 字符串
  • 处理如Record条目(键值对)之类的结构化数据
  • 转换、转换或标准化包含转义序列的字符串
  • 创建<强>读取器和<强>写入器API
    • 实现异步兼容的扩展特质

设计选择

语言

Rust 被选择,因为它在运行时具有高性能、资源效率和内存安全保证。它还提供了非常有用的语言构造,例如模式匹配和包含代数数据类型的强大类型系统。

解析方法

阐释 使用 递归下降解析策略。这是通过 解析器组合器 实现的。解析器组合器本质上是一组通过各种方式连接起来的高阶函数,生成越来越复杂(且有用!)的解析函数。

解析器组合器提供了独特的灵活性程度,非常适合解析JSON。它们为处理细节和奇特性提供了解决方案,并且以类似的速度运行于手写解析器。

编写JSON解析器是出了名的难正确,因为[官方规范中存在的歧义][parsing-json-abiguities]。不幸的是,原始的 RFC 非常含糊。这对设计用于解析该格式的软件产生的影响是显著的。

外部依赖

此项目依赖于几个维护良好的crate

许可证

根据 MIT 许可证 许可

贡献

除非你明确说明,否则你提交给 阐释 的任何有意贡献都应按照 MIT 许可证许可,不得附加任何其他条款或条件。

请参阅 CONTRIBUTING.md

参考文献和特别感谢

我们特别感谢以下个人和组织

Nicolas Seriot,他为阐述解析JSON的隐藏复杂性做出了出色的贡献。

依赖项

~1MB
~19K SLoC