昨日、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)</p>
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文書は当てるかどうかを検証するこどができる。
import jsonschema, simplejson
data = """{
"name": "Ian Lewis",
"email": "IanLewis@xyz.com",
"address": "123 Main St.",
"phone": "080-1942-9494"
}"""
schema = """{
"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"}
}
}"""
x = simplejson.loads(data)
s = simplesjson.loads(schema)
jsonschema.validate(x,s)
JSONSchemaに拡張プロパティを付けることや、デフォルト検証処理を変更することができるので、 とても柔軟なモジュールだと思っています (自分が作ったことについて言えるかなぁ ^^; ) 。僕自身はGAEのプロジェクトで使うつもりだし、 皆さんのご意見を是非聞かせてもらいたいと思います。