jsonpointer 1.8 KB

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