Engineer in Tokyo

jsonschema ヴァリデーター 0.1a

昨日、JSONSchema ヴァリデーターを漸くリリースしました。XML Schema と同じようなJSONSchemaは JSON文書の構造が正しいかどうかを検証するための文書。さらに、jsonschema ヴァリデーターはそのJSONSchema文書に従ってJSON文書が正しいかどうかを検証するPythonモジュール。JSON Schema Proposal Second Draftを基にしています。

ソースコードはこちらからダウンロードできます:jsonschema-0.1a.tar.gz
ドキュメンテーションはこちら: jsonschema (version 0.1a) documentation (日本語 README)

JSONSchemaはJSON文書の構造を検証するために作られている。JSON文書の構造、データ形式を定義することが出来る。例えば、連絡先のデータがあるとしましょう。

{
  "name": "Ian Lewis",
  "email": "IanLewis@xyz.com",
  "address": "123 Main St.",
  "phone": "080-1942-9494"
}

その文書をJSONSchemaで定義すると、以下のようのJSONSchemaが出る

{
  "type":"object",
  "properties":{
    "name": {"type":"string"},
    "age": {"type":"int", "optional":True},
    "email": {
      "type":"string",
      "pattern":"^[A-Za-z0-9][A-Za-z0-9\.]*@([A-Za-z0-9]+\.)+[A-Za-z0-9]+$"
    },
    "address": {"type":"string"},
    "phone": {"type":"string"}
  }
}

さらに、以下の Python コードでこのJSON文書は当てるかどうかを検証するこどができる。

</table></div>

JSONSchemaに拡張プロパティを付けることや、デフォルト検証処理を変更することができるので、とても柔軟なモジュールだと思っています (自分が作ったことについて言えるかなぁ ^^; ) 。 僕自身はGAEのプロジェクトで使うつもりだし、皆さんのご意見を是非聞かせてもらいたいと思います。

import jsonschema, simplejson

data = """{
</td></tr>
  "</span>name": "Ian Lewis",
</td></tr>
  "</span>email": "IanLewis@xyz.com",
</td></tr>
  "</span>address": "123 Main St.",
</td></tr>
  "</span>phone": "080-1942-9494"
</td></tr>
}"</span>""

schema = """{
</td></tr>
  "</span>type":"object",
</td></tr>
  "</span>properties":{
</td></tr>
    "</span>name": {"type":"string"},
</td></tr>
    "</span>age": {"type":"int", "optional":True},
</td></tr>
    "</span>email": {
</td></tr>
      "</span>type":"string",
</td></tr>
      "</span>pattern":"^[A-Za-z0-9][A-Za-z0-9\.]*@([A-Za-z0-9]+\.)+[A-Za-z0-9]+$"
</td></tr>
    },
    "</span>address": {"type":"string"},
</td></tr>
    "</span>phone": {"type":"string"}
</td></tr>
  }
}"</span>""

x = simplejson.loads(data)
s = simplesjson.loads(schema)
jsonschema.validate(x,s)