tool.py revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)r"""Command-line tool to validate and pretty-print JSON
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Usage::
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    $ echo '{"json":"obj"}' | python -m simplejson.tool
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    {
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        "json": "obj"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    $ echo '{ 1.2:3.4}' | python -m simplejson.tool
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    Expecting property name: line 1 column 2 (char 2)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)"""
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import sys
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import simplejson as json
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)def main():
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if len(sys.argv) == 1:
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        infile = sys.stdin
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        outfile = sys.stdout
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    elif len(sys.argv) == 2:
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        infile = open(sys.argv[1], 'rb')
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        outfile = sys.stdout
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    elif len(sys.argv) == 3:
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        infile = open(sys.argv[1], 'rb')
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        outfile = open(sys.argv[2], 'wb')
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    else:
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        raise SystemExit(sys.argv[0] + " [infile [outfile]]")
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    try:
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        obj = json.load(infile,
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                        object_pairs_hook=json.OrderedDict,
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                        use_decimal=True)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    except ValueError, e:
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        raise SystemExit(e)
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    json.dump(obj, outfile, sort_keys=True, indent='    ', use_decimal=True)
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    outfile.write('\n')
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)if __name__ == '__main__':
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    main()
40