このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

JSONにバイナリデータ

「JSONスキーマ属性とその適用対象の一覧 2010年春・編」から引用:

僕は、JSONでもBase64エンコードのbinary型をネイティブ・サポートすべきだと思っています。XML Schema Part 2: Datatypes ではバイナリデータをサポートしてます(http://www.w3.org/TR/xmlschema-2/#base64Binary)。バイナリがあれば、"format" : "image/gif" のようなスキーマ属性指定にも意味を持たせられます。

JSONにバイナリデータを導入するとき、最初に問題になるのは「通常の(まったく拡張してない)JSONへのマーシャリング」です。

JSONにメタデータや特殊な構文構成素を記述するときは、ドル記号('$')で始まる名前のプロパティを使うことが、ある程度は慣例となっているので、この方法を使うことにします。次の形をバイナリデータの表現とします。

 {"$data" : "ここにテキストにエンコードしたバイナリデータ"}

最初僕は、バイナリデータの型を表すために $type というプロパティも考えていましたが、別な方法を採用します。プロパティ値に、data: URIスキーム(http://en.wikipedia.org/wiki/Data_URI_scheme)のURI文字列をそのまま使います。次にようになります。

 {"$data" : "data:image/jpeg;base64, ここにBase64エンコードしたバイナリデータ"}

メタデータとしての型は、プロパティ値の先頭に埋め込まれます。「data」という綴りの語が二回出てきて冗長ですが、この2つは役割が違います。$data はJSON処理系がバイナリデータを認識するための目印です。一方、値の先頭の data: は、この文字列がdata:スキームURIであることを伝えます。$dataプロパティの値を取り出して、それをそのままdata:スキームを理解できる処理系に渡せば、対応するバイナリオブジェクト(例えばJPEG画像)が得られるでしょう。

スキーマ定義の際には、JSONスキーマ属性formatが使えます。本家JSONスキーマ構文なら、次のような記述となります。

{
  "type" : "binary",
  "format" : "image/jpeg"
}

Catyスキーマ構文なら:

 binary(format = "image/jpeg")