| |
|
|
| import sys |
| import json |
| import argparse |
| from pprint import pformat |
|
|
| import jmespath |
| from jmespath import exceptions |
|
|
|
|
| def main(): |
| parser = argparse.ArgumentParser() |
| parser.add_argument('expression') |
| parser.add_argument('-f', '--filename', |
| help=('The filename containing the input data. ' |
| 'If a filename is not given then data is ' |
| 'read from stdin.')) |
| parser.add_argument('--ast', action='store_true', |
| help=('Pretty print the AST, do not search the data.')) |
| args = parser.parse_args() |
| expression = args.expression |
| if args.ast: |
| |
| expression = jmespath.compile(args.expression) |
| sys.stdout.write(pformat(expression.parsed)) |
| sys.stdout.write('\n') |
| return 0 |
| if args.filename: |
| with open(args.filename, 'r') as f: |
| data = json.load(f) |
| else: |
| data = sys.stdin.read() |
| data = json.loads(data) |
| try: |
| sys.stdout.write(json.dumps( |
| jmespath.search(expression, data), indent=4, ensure_ascii=False)) |
| sys.stdout.write('\n') |
| except exceptions.ArityError as e: |
| sys.stderr.write("invalid-arity: %s\n" % e) |
| return 1 |
| except exceptions.JMESPathTypeError as e: |
| sys.stderr.write("invalid-type: %s\n" % e) |
| return 1 |
| except exceptions.UnknownFunctionError as e: |
| sys.stderr.write("unknown-function: %s\n" % e) |
| return 1 |
| except exceptions.ParseError as e: |
| sys.stderr.write("syntax-error: %s\n" % e) |
| return 1 |
|
|
|
|
| if __name__ == '__main__': |
| sys.exit(main()) |
|
|