1 个不稳定版本
0.1.0 | 2022年5月7日 |
---|
#141 在 #json-parser
84KB
阐释
是一个功能强大的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