JsonValidator
30分プログラム、その687。JsonValidatorを作ってみた。
最近、とある事情で、他の人にJsonのバリデータを作らせて、そのコードレビューしてます。それはそれで楽しいけれど、やっぱり自分でコードが書きたい!
というわけで、Jsonバリデータを作ってみました。
使い方
$ python json-validator.py data1.js schema.js Invalid Json error: Required field 'name' is missing $ python json-validator.py data2.js schema.js OK
ソースコード
#! /usr/bin/python # -*- mode:python; coding:utf-8 -*- # # json-validator.py - # # Copyright(C) 2009 by mzp # Author: MIZUNO Hiroki / mzpppp at gmail dot com # http://howdyworld.org # # Timestamp: 2009/11/02 21:31:11 # # This program is free software; you can redistribute it and/or # modify it under MIT Lincence. # import sys import simplejson import jsonschema class JsonError: def __init__(self, message): self.message = message class InvalidError(JsonError): def __repr__(self): return "Invalid Json error: %s" % self.message class ParseError(JsonError): def __repr__(self): return "Parse error: %s" % self.message def validate(json,schema): try: jsonschema.validate(json,schema) except ValueError,m: raise InvalidError(m) def readAll(path): with open(path) as fp: return fp.read() def parse(str): try: return simplejson.loads(str) except ValueError,m: raise ParseError(m) def validateFile(jsonPath, schemaPath): validate(parse(readAll(jsonPath)), parse(readAll(schemaPath))) if __name__ == '__main__': if len(sys.argv) != 3: print "usage: %s <json> <schema>" % sys.argv[0] else: try: (_,json,schema) = sys.argv validateFile(json, schema) print "OK" except JsonError,m: sys.stderr.write("%s\n" % m) sys.exit(1)