RSONはRust Object Notationの略で、Rustの形式でオブジェクトの表記することを目的にしたものです。RON(https://github.com/ron-rs/ron)を参考にしつつ、よりRustのシンタックスに近づけたものです。
RSONを考える前にJSONの問題について考えます。
{
"materials": {
"metal": {
"reflectivity": 1.0
},
"plastic": {
"reflectivity": 0.5
}
},
"entities": [
{
"name": "hero",
"material": "metal"
},
{
"name": "moster",
"material": "plastic"
}
]
}
例えば上記のJSONにはこのような問題があります。
- 構造体とmap型が同一で、フィールドの順番はランダムです
- 末尾のカンマが許されていません
- コメントを記述できません
上記のデータをRSONで表現するとこのようになります。
RONの表記に似ていますが、一部のカッコの使い方が異なることが分かります。
RSONのほうがRustネイティブな表記に近いです。
RSONはRONのforkなので多くの部分でRONと共通の仕様を持っているようです。
/*
* 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 an object
name: "hero",
material: "metal",
},
{
name: "monster",
material: "plastic",
},
],
}