BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース JSONバリデーションのまとめ

JSONバリデーションのまとめ

原文(投稿日:2013/04/15)へのリンク

 

どんな “柔軟な” すなわち “拡張性のある” ファイルフォーマットを作っても、遅かれ早かれ開発者のグループがバリデーションに関して文句を言い始める。多くがこのことに対処できるが、それらは以下のように分類できる。

  • データが正しくフォーマットされていると仮定する。
  • 手動で間違った形式のデータを確認し、修正しようとする。
  • 手動で間違った形式のデータを確認し、適切なら拒否する。
  • 間違った形式のデータを自動的に確認する。

この記事の目的は、これらのオプションを議論することではなく、自動バリデーションに利用できるツールキットをまとめることである。

JSON スキーマ

JSON スキーマ は、17 の異なるプロジェクトでサポートされている、提案された標準だ。JavaScript、Java、Python、Ruby、Perl、PHP、.NET、ActionScript、C、Haskell、および Erlang で利用できる。その形式は、実際のデータにほとんど似ていないスキーマを持つ VeriJSON よりも複雑だ。それはまた、数の範囲チェック、リストの制限、リストに重複したエントリを防ぐ事が出来る機能を持ち、もっと包括的である。また、他のスキーマへの参照をサポートし、大規模なスキーマを小さなコンポーネントに分解することができる。

Atdgen

Atdgen は、OCamlで JSON のシリアル化および逆シリアル化をサポートしている。JSON のスキーマは、atd ファイルとして知られているものを使用して作成される。これらのファイルは、OCaml クラスファイルを生成するコードジェネレーターとオブジェクト/JSON コンバーターをマッチさせることで走る。Atdgen では、バリデーションは、逆シリアル化プロセス中に発生します。

atdファイル中のバリデーションルールは、オープンエンドで、開発者は、どんなOCamlコードでもatdファイルに直接注入できる。セカンダリースキーマファイルへの参照がサポートされている。

Atdgen は、オープンソースライセンスのもとで入手できる。

DataContractJsonSerializer

WCFの DataContractSerializerに基づいたDataContractJsonSerializerは、クラス定義とデータコントラクト属性を使って、どのようにJSONファイルをバリデートし、最終的に逆シリアライズするかを決める。これは基本的タスクに適しているが、パフォーマンス問題が発生する傾向にあり、辞書の作成が困難である。バリデーションは、基本的な構造にかなり制限されている。

Json.NET

James Newton-King氏が作ったJson.NETは、今日入手できる中で最も包括的なJSON シリアライザ/逆シリアライザである。 DataContractJsonSerializerのようにJson.NETは、クラスを使ってスキーマを定義できる。標準のWCFデータコントラクト属性、あるいはJSON.NETのシリアライズ属性を使うことができる。DataTable と nHibernate のエンティティを含む様々なタイプをサポートしている。今月にJSON.NET 5.0は、無制限サイズの整数(BigIntegerを介して)とIEnumerable コンストラクタを公開するリードオンリーのコレクションをサポートする。

JSON.NETはまた、JSON スキーマを介して、バリデーションをサポートする。

VeriJSON

VeriJSONは、パターンベースのマッチングを使用したObjective-C ライブラリである。パターン自身がJSONで書かれており、サポートされている型は “number”, “string”, “bool”, “url”である。文字列は、正規表現を使って制限できる。urlは、スキーマ(例えば、http, ftp)によって制限できる。配列やオブジェクトは、構造的に表せ、オプションのプロパティがサポートされている。

VeriJSON は、オープンソースライセンスの下で入手できる。

 

この記事に星をつける

おすすめ度
スタイル

BT