OLD | NEW |
| (Empty) |
1 #!/usr/bin/env python | |
2 # Copyright 2015 The Chromium Authors. All rights reserved. | |
3 # Use of this source code is governed by a BSD-style license that can be | |
4 # found in the LICENSE file. | |
5 import argparse | |
6 import json | |
7 import os | |
8 import sys | |
9 | |
10 | |
11 def GetFormattedJSONString(file_path): | |
12 with open(file_path, 'r') as f: | |
13 json_obj = json.load(f) | |
14 file_content = f.read() | |
15 return json.dumps( | |
16 json_obj, indent=2, sort_keys=True, separators=(',', ': ')) | |
17 | |
18 | |
19 def ValidateJSONFormat(file_path): | |
20 with open(file_path, 'r') as f: | |
21 file_content = f.read() | |
22 if file_content != GetFormattedJSONString(file_path): | |
23 raise Exception( | |
24 'Reformat your JSON file by running: %s --format %s' % | |
25 (__file__, file_path)) | |
26 print >> sys.stdout, ('%s passes the JSON format validation' % file_path) | |
27 | |
28 | |
29 def Format(file_path): | |
30 formatted_JSON_string = GetFormattedJSONString(file_path) | |
31 with open(file_path, 'w') as f: | |
32 f.write(formatted_JSON_string) | |
33 | |
34 | |
35 def Main(args): | |
36 description = """A JSON formatting tool. | |
37 | |
38 This is a tool that validate and reformats JSON file so that it complies with | |
39 a certain style. The JSON style imposed by this tool is: | |
40 * JSON array elements and object members are indented with 2 spaces. | |
41 * Dictionaries objects are sorted by key. | |
42 * Items are sperated by ', ' and ': '. | |
43 """ | |
44 parser = argparse.ArgumentParser( | |
45 description=description, formatter_class=argparse.RawTextHelpFormatter) | |
46 parser.add_argument('file_path', type=str, help='The path to JSON file.') | |
47 parser.add_argument('--format', action='store_true', default=False, | |
48 help='Format the JSON file.') | |
49 options = parser.parse_args(args) | |
50 if options.format: | |
51 Format(options.file_path) | |
52 return 0 | |
53 ValidateJSONFormat(options.file_path) | |
54 return 0 | |
55 | |
56 | |
57 if __name__ == '__main__': | |
58 sys.exit(Main(sys.argv[1:])) | |
OLD | NEW |