jsonpointer 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #!/Users/jiaqiang/PycharmProjects/tx_flow_analysis/venv/bin/python3
  2. # -*- coding: utf-8 -*-
  3. import argparse
  4. import json
  5. import sys
  6. import jsonpointer
  7. parser = argparse.ArgumentParser(
  8. description='Resolve a JSON pointer on JSON files')
  9. # Accept pointer as argument or as file
  10. ptr_group = parser.add_mutually_exclusive_group(required=True)
  11. ptr_group.add_argument('-f', '--pointer-file', type=argparse.FileType('r'),
  12. nargs='?',
  13. help='File containing a JSON pointer expression')
  14. ptr_group.add_argument('POINTER', type=str, nargs='?',
  15. help='A JSON pointer expression')
  16. parser.add_argument('FILE', type=argparse.FileType('r'), nargs='+',
  17. help='Files for which the pointer should be resolved')
  18. parser.add_argument('--indent', type=int, default=None,
  19. help='Indent output by n spaces')
  20. parser.add_argument('-v', '--version', action='version',
  21. version='%(prog)s ' + jsonpointer.__version__)
  22. def main():
  23. try:
  24. resolve_files()
  25. except KeyboardInterrupt:
  26. sys.exit(1)
  27. def parse_pointer(args):
  28. if args.POINTER:
  29. ptr = args.POINTER
  30. elif args.pointer_file:
  31. ptr = args.pointer_file.read().strip()
  32. else:
  33. parser.print_usage()
  34. sys.exit(1)
  35. return ptr
  36. def resolve_files():
  37. """ Resolve a JSON pointer on JSON files """
  38. args = parser.parse_args()
  39. ptr = parse_pointer(args)
  40. for f in args.FILE:
  41. doc = json.load(f)
  42. try:
  43. result = jsonpointer.resolve_pointer(doc, ptr)
  44. print(json.dumps(result, indent=args.indent))
  45. except jsonpointer.JsonPointerException as e:
  46. print('Could not resolve pointer: %s' % str(e), file=sys.stderr)
  47. if __name__ == "__main__":
  48. main()