|
|
|
|
|
|
|
from __future__ import print_function |
|
|
|
import sys |
|
import json |
|
import jsonpatch |
|
import argparse |
|
|
|
|
|
parser = argparse.ArgumentParser(description='Diff two JSON files') |
|
parser.add_argument('FILE1', type=argparse.FileType('r')) |
|
parser.add_argument('FILE2', type=argparse.FileType('r')) |
|
parser.add_argument('--indent', type=int, default=None, |
|
help='Indent output by n spaces') |
|
parser.add_argument('-u', '--preserve-unicode', action='store_true', |
|
help='Output Unicode character as-is without using Code Point') |
|
parser.add_argument('-v', '--version', action='version', |
|
version='%(prog)s ' + jsonpatch.__version__) |
|
|
|
|
|
def main(): |
|
try: |
|
diff_files() |
|
except KeyboardInterrupt: |
|
sys.exit(1) |
|
|
|
|
|
def diff_files(): |
|
""" Diffs two JSON files and prints a patch """ |
|
args = parser.parse_args() |
|
doc1 = json.load(args.FILE1) |
|
doc2 = json.load(args.FILE2) |
|
patch = jsonpatch.make_patch(doc1, doc2) |
|
if patch.patch: |
|
print(json.dumps(patch.patch, indent=args.indent, ensure_ascii=not(args.preserve_unicode))) |
|
sys.exit(1) |
|
|
|
if __name__ == "__main__": |
|
main() |
|
|