diff options
author | Håkan Waara <hwaara@gmail.com> | 2014-01-27 23:36:26 +0100 |
---|---|---|
committer | Håkan Waara <hwaara@gmail.com> | 2014-01-27 23:36:26 +0100 |
commit | 57c84c07d2d283dab2fb3f2f5095c404e7fb9866 (patch) | |
tree | db92a5af63cfbb495f50a99121e123fcef0a5c1f | |
parent | f4cfe56b8e8370116c5275ddcea970e9a68fd75d (diff) | |
download | jsonpath-rw-57c84c07d2d283dab2fb3f2f5095c404e7fb9866.tar.gz |
add jsonpath.py script based on https://github.com/makefu/jsonpath (but improved and expanded) that will be installed in bin/. this means anyone installing this package will also get a jsonpath.py that will work on the command line
-rwxr-xr-x | jsonpath_rw/bin/jsonpath.py | 49 | ||||
-rw-r--r-- | setup.py | 1 |
2 files changed, 50 insertions, 0 deletions
diff --git a/jsonpath_rw/bin/jsonpath.py b/jsonpath_rw/bin/jsonpath.py new file mode 100755 index 0000000..89a714a --- /dev/null +++ b/jsonpath_rw/bin/jsonpath.py @@ -0,0 +1,49 @@ +#!/usr/bin/python +# encoding: utf-8 +# Copyright © 2012 Felix Richter <wtfpl@syntax-fehler.de> +# This work is free. You can redistribute it and/or modify it under the +# terms of the Do What The Fuck You Want To Public License, Version 2, +# as published by Sam Hocevar. See the COPYING file for more details. + +from jsonpath_rw import parse +import json +import sys +import glob +if len(sys.argv) < 2: + print("""usage: %s jsonpath [files] +path can be: + atomics: + $ - root object + `this` - current object + + operators: + path1.path2 - same as xpath / + path1|path2 - union + path1..path2 - somewhere in between + + fiels: + fieldname - field with name + * - any field + [_start_?:_end_?] - array slice + [*] - any array index +""") + sys.exit(1) + +expr = parse(sys.argv[1]) + +def find_matches_for_file(f): + return [unicode(match.value) for match in expr.find(json.load(f))] + +def print_matches(matches): + print(u"\n".join(matches).encode("utf-8")) + +if len(sys.argv) < 3: + # stdin mode + print_matches(find_matches_for_file(sys.stdin)) +else: + # file paths mode + for pattern in sys.argv[2:]: + for filename in glob.glob(pattern): + with open(filename) as f: + print_matches(find_matches_for_file(f)) + @@ -14,6 +14,7 @@ setuptools.setup( license='Apache 2.0', long_description=io.open('README.rst', encoding='utf-8').read(), packages = ['jsonpath_rw'], + scripts = ['jsonpath_rw/bin/jsonpath.py'], test_suite = 'tests', install_requires = [ 'ply', 'decorator', 'six' ], classifiers = [ |