1 个不稳定版本
0.1.0 | 2021年3月13日 |
---|
#12 in #json-text
在 jsondata 中使用
9KB
176 行
为什么还要在 Rust 中添加另一个 JSON 包呢?
该软件包在几个方面做了权衡,以适应大数据和文档数据库。
- 支持 128 位有符号整数。
- JSON 数字延迟转换。
- 将 Rust 原生类型序列化为 JSON 文本。
- 将 JSON 文本反序列化为 Rust 原生类型。
- 使用 JSON Pointer 在 JSON 文档上执行 CRUD 操作。
- 属性对象的排序键。
- 流式 JSON 解析器。
- 支持 JSON5 标准。
- 常见的算术和逻辑操作。
- 可排序 JSON。
有用链接
数字延迟转换
将 JSON 数字转换为 Rust 原生类型并不总是所需的。特别是在大数据的上下文中,数据以 JSON 格式存储,我们只需要查找文档中的特定字段。
此实现提供了 JSON 数字的延迟转换,可带来 高达 30% 的性能提升。
JSON 文档的 CRUD 操作
使用 Json Pointer 可以识别 JSON 文档中嵌套的特定字段。例如,以下文档
{
"age": 26,
"eyeColor": "green",
"name": "Leon Robertson",
"gender": "male",
"company": "AEORA",
"phone": "+1 (835) 447-2960",
"tags": [ "officia", "reprehenderit", "magna" ],
"friends": [
{
"id": 0,
"name": "Glenda Chan"
}
]
}
- /age 应指向值
26
。 - /tags 应指向值
"officia", "reprehenderit", "magna" ]
。 - /tags/0 应指向值
"officia"
。 - /friends 应指向值
[{"id": 0, "name": "Glenda Chan"}]
。 - /friends/name 应指向值
"Glenda Chan"
。
操作列表
- 使用 JSON Pointer 获取 JSON 文档内部的字段。
- 设置 JSON 文档内部的字段。
- 删除 JSON 文档内部的字段。
- 向 JSON 文档中追加字符串或数组字段。
JSON5
- 对象键可以是 ECMAScript 5.1 的 IdentifierName。
- 对象可以有单个尾随逗号。
- 数组可以有单个尾随逗号。
- 字符串可以使用单引号。
- 字符串可以通过转义换行符跨越多行。
- 字符串可以包含字符转义。
- 数字可以是十六进制。
- 数字可以有前导或尾随的小数点。
- 数字可以是 IEEE 754 正无穷,负无穷,和 NaN。
- 数字可以以显式的加号开头。
- 允许单行和多行注释。
- 允许额外的空白字符。
可排序 JSON
- Null 类型应排在所有其他类型之前。
- 布尔 类型应排在 Null 类型之后。
- 数字 类型应排在布尔类型之后。
- 小于等于 -2^127 的 f64 值将排在所有 i128 整数之前。
- 大于等于 2^127-1 的 f64 值将排在所有 i128 整数之后。
- NaN(非数字)值将排在所有 i128 整数之后。
- -Infinity 应排在所有数字之前。
- +Infinity 应排在所有数字之后。
- NaN 应排在 +Infinity 之后。
- 字符串 类型应排在数字类型之后。
- 数组 类型应排在字符串类型之后。
- 对象 类型应排在数组类型之后。
- 对象中的所有 (键,值) 对应根据键进行预排序。
- 比较两个对象时,比较应从第一个键开始,到最后一个键。
- 如果两个键在对象中的给定位置相等,则比较它们对应的值。
- 如果一个对象是另一个对象的子集,例如,如果一个对象包含另一个对象具有的所有 (键,值) 属性,那么它应排在另一个对象之前。
有用链接
- JSON 排序顺序的详细描述.
- Rust-lang issue#46298 和 issue#10184,讨论了 f64 -> 整数的饱和转换。
- Rust 对 f64 -> 整数的内部讨论
- Unicode 排序 TR10。
- ICU 排序.
- 浮点数的 完全排序
- 关于浮点数排序的 stackoverflow 上的讨论。
- 完全排序线程 在 http://users.rust-lang.org 上。
- 一篇关于浮点数的优秀 博客,以开始学习。
JSON 文档上的操作
- 算术运算,加,减,乘,除,取余,取反。
- 位运算,左移,右移,按位与,按位或,按位异或。
- 逻辑运算,非,与,或。
- 索引操作。
- 范围操作。
贡献
- 简单的工作流程。Fork - 修改 - 提交请求。
- 在创建PR之前,
- 运行
make build
确认所有构建版本通过,且没有警告和错误。 - 运行
check.sh
,没有警告、错误,所有测试用例通过。 - 运行
perf.sh
,没有警告、错误,所有测试用例通过。 - [安装][拼写检查] 并运行
cargo spellcheck
以移除常见的拼写错误。
- 运行
- [开发者证书来源][dco]更受欢迎。
依赖项
~2MB
~45K SLoC