あんれ、また間違えた。これはメモ編(「檜山本人以外の読者を考慮しておりません。あしからず。」)のほうに投稿したつもりだった。こっちから消してもいいんだけど、なんかのご縁(?)だから、とりあえず残しておいて、後で説明を付け加えようかな。
[追記]後ろに解説を書きました。タイトルの「XJSON - JSON」は、引き算の意味です。つまり、XJSONとJSONの差分の説明です。[/追記]
表面的な拡張:
- コメント(保存されない)
- 余分なカンマ
- 三重引用符
構造的な拡張:
- タグ
- 組み込みのバイナリー型
- ハイパーリンク(未定){"$ref" : "http://d.hatena.ne.jp/", "$rel" : "top"}
マーシャリング:
- コメントを除いて、すべての拡張部分は情報欠損無しで通常JSONに変換出来る。
コメントは削除されるので、もとに戻せない。
XJSON(Extended JSON)は、Catyで使っているデータ構造で、その名のとおりJSONを拡張しています。次はXJSONインスタンスの例です。
/* 従業員 */ @EmployeeList [ // わが社のホープ @Person { "name" : @PersonNameJa "板東 トン吉", "tel" : @TelNo "03-0000-9999", "age" : 26, }, // わが社のアイドル @Person { "name" : @PersonNameJa "園部 ハナ子", "tel" : @TelNo "04-1111-1111", "age" : 22, "message" : '''こんにちは、園部です。 みんなに「美人だね」とか「可愛い、可愛い!」っていつも言われるんですが、 自分ではそんなことないと思ってます。性格は控えめですし。 それより、頭がよくて運動神経抜群なところが自慢なんですよ、ワタシ。 よろしくね。''' }, ]
/* ... */ や // ... のところはコメントです。オリジナルのJSONではコメントが書けなくて不便なんで入れました。
配列の最後の項目や、オブジェクトの最後のプロパティの後にカンマがあってもエラーにしません。どうしてこんな仕様を導入したか? コピー&ペーストや1行削除でデータを編集していて、最後のカンマに腹を立てた経験がありませんか? その経験がある人ならわかりますよね。
改行を含む文字列は、\n というエスケープで書けますが、見にくくてイヤ。だから三重引用符(WYSIWYG文字列)があります。
データの種別や用途を表すためにアットマークから始まるタグを使えます。タグは任意に入れ子にできるので、@mony @yen 1200 のようにも使えます。Caty内では、タグはユニオン型(直和型)の弁別子や多方向分岐の目安にも使われています。
画像データなども表現できるように、バイナリ型を持ちます。ハイパーリンク参照型はまだ検討中です。
これだけ拡張しているんですが、XJSONデータを通常のJSONにより表現できます。コメントが削除される以外はすべての情報は保存されます。