summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHåkan Waara <hwaara@gmail.com>2014-01-27 23:36:26 +0100
committerHåkan Waara <hwaara@gmail.com>2014-01-27 23:36:26 +0100
commit57c84c07d2d283dab2fb3f2f5095c404e7fb9866 (patch)
treedb92a5af63cfbb495f50a99121e123fcef0a5c1f
parentf4cfe56b8e8370116c5275ddcea970e9a68fd75d (diff)
downloadjsonpath-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-xjsonpath_rw/bin/jsonpath.py49
-rw-r--r--setup.py1
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))
+
diff --git a/setup.py b/setup.py
index f8d9bd5..c37c0f6 100644
--- a/setup.py
+++ b/setup.py
@@ -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 = [