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