1个不稳定版本
使用旧的Rust 2015
0.2.1 | 2017年9月29日 |
---|
#2002 在 编码
38 每月下载量
用于 rdedup-prune
72KB
2.5K SLoC
Rust对象表示法
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"
}
]
}
注意这些问题
- 结构和映射相同 - 导出字段的随机顺序
- 令人烦恼且不便阅读
- 与版本控制不兼容 - 引用字段名
- 过于冗长 - 不支持枚举
- 不允许尾随逗号
- 不允许注释
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