1个不稳定版本

使用旧的Rust 2015

0.2.1 2017年9月29日

#2002编码

38 每月下载量
用于 rdedup-prune

MIT/Apache

72KB
2.5K SLoC

Rust对象表示法

Build Status Crates.io Docs Gitter

RSON是一种简单的可读数据序列化格式,看起来类似于Rust语法。它旨在支持Serde数据模型中的所有内容,包括结构体、枚举、元组、数组、泛型映射和原始值。RSON是RON库的一个分支,但提供了更合适的Rust语言语法。

JSON示例

{
   "materials": {
        "metal": {
            "reflectivity": 1.0
        },
        "plastic": {
            "reflectivity": 0.5
        }
   },
   "entities": [
        {
            "name": "hero",
            "material": "metal"
        },
        {
            "name": "moster",
            "material": "plastic"
        }
   ]
}

注意这些问题

  1. 结构和映射相同 - 导出字段的随机顺序
    • 令人烦恼且不便阅读
    • 与版本控制不兼容 - 引用字段名
    • 过于冗长 - 不支持枚举
  2. 不允许尾随逗号
  3. 不允许注释

RSON示例

/*
 * Scene object example
 */
Scene { // class name is optional
    materials: { // this is a map
        "metal": {
            reflectivity: 1.0,
        },
        "plastic": {
            reflectivity: 0.5,
        },
    },
    entities: [ // this is an array
        { // this is a object
            name: "hero",
            material: "metal",
        },
        {
            name: "monster",
            material: "plastic",
        },
    ],
}

RSON格式使用{..}括号表示异构结构(类)和同构映射,其中类通过键与映射不同:在类中这些是标识符,但在映射中这些是值。此外,它使用(..)括号表示异构元组,并使用[..]表示同构数组。这种区分可以解决JSON的最大问题。

RON示例

Scene( // class name is optional
    materials: { // this is a map
        "metal": (
            reflectivity: 1.0,
        ),
        "plastic": (
            reflectivity: 0.5,
        ),
    },
    entities: [ // this is an array
        (
            name: "hero",
            material: "metal",
        ),
        (
            name: "monster",
            material: "plastic",
        ),
    ],
)

与RSON不同,RON格式使用(..)括号表示所有异构结构(类和元组),同时保留{..}用于映射,并使用[..]表示同构数组。这是JSON和原生Rust表示中类的非传统语法。

RSON异构结构语法

以下是解析异构结构的通用规则

类是否命名? 字段是否命名? 它是什么? 示例
元组 (a,b)
是/否 元组结构 名称(a,b)
枚举值 变体(a,b)
是/否 结构 {f1:a,f2:b,}

规格说明

有一个非常基础的、正在开发中的规格说明,可在维基页面上找到

附录

为什么不选择XML?

  • 过于冗长
  • 不清楚如何处理属性与内容

为什么不选择YAML?

  • 存在大量的空白字符
  • 规格说明过于庞大

为什么不选择TOML?

  • 语法陌生
  • 绝对路径不可扩展

为什么不选择RON?

  • 类使用了非传统语法
  • 在类和映射语法之间混淆
  • 不支持块注释

为什么不选择XXX?

  • 如果你知道更好的格式,请告诉我!

许可证

RSON采用Apache-2.0和MIT双重许可。

依赖关系

~110–350KB