Cognitect がリリースしたデータ交換フォーマット、それが Transit. Edn 風味の JSON/MessagePack といったところでしょうか。
特徴
文字列、数値などの基本型のほかに、URI, UUID などの拡張型をサポート
URI, も UUID も文字列でもたせてアプリ側で判断という思想ではない
ユーザ定義型もサポート
基本型を組合せたユーザ定義型も使える
ユーザ定義型の定義自体もデータに埋め込まれる
複雑なデータはマップのアレイのマップの、。。。で持たせてアプリ側で判断という思想ではない
JSON, MessagePack と互換性あり
JSON, MessagePack で出力できる。出力したものは Transit として復元可能
Transit な JSON/MessagePack を JSON/MessagePack として解釈可能。ただし、Transit 独自拡張はエンコードされていて JSON/MessagePack としては解釈不可(謎データになる)
Map と Array と Raw さえあればあとはアプリ側の実装でどのようなデータも表現できる、という文化ではなく、データ自身がデータ型の説明をできるようにというに、それによりデータフォーマットを拡張できるようにする、というのが特徴のようです。
そのほか
使えるデータ型に Symbol があるので Clojure で便利です。
おわりに
ブログ記事とドキュメントを三分ほどで流し読みしただけなので間違っているかも、おかしな箇所があればコメントしてください。
MessagePack で十分(私)という人には機会の無いデータフォーマットかもしれませんが、ユーザ定義型の定義を見てアプリケーション側でコードを動的に生成するユースケースとか、Symbol がデフォルトでサポートされていることとか、そういうことを考えると Clojure で使うのが楽しみなデータフォーマットです。












