#json #json5 #data #json-text #streaming-json

jsondata-derive

jsondata 类型宏

1 个不稳定版本

0.1.0 2021年3月13日

#12 in #json-text


jsondata 中使用

MIT 许可证

9KB
176

为什么还要在 Rust 中添加另一个 JSON 包呢?

Rustdoc GitPitch Build Status

该软件包在几个方面做了权衡,以适应大数据和文档数据库。

  • 支持 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 文档上的操作

  • 算术运算,加,减,乘,除,取余,取反。
  • 位运算,左移,右移,按位与,按位或,按位异或。
  • 逻辑运算,非,与,或。
  • 索引操作。
  • 范围操作。

详细信息可以在这里找到.

贡献

  • 简单的工作流程。Fork - 修改 - 提交请求。
  • 在创建PR之前,
    • 运行 make build 确认所有构建版本通过,且没有警告和错误。
    • 运行 check.sh,没有警告、错误,所有测试用例通过。
    • 运行 perf.sh,没有警告、错误,所有测试用例通过。
    • [安装][拼写检查] 并运行 cargo spellcheck 以移除常见的拼写错误。
  • [开发者证书来源][dco]更受欢迎。

依赖项

~2MB
~45K SLoC