blob: 364615f37f33a6ffc1fa333705d8a00d8f66722f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
#!/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: jsonpath.py expression [files]
The expression is JSONPath and 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))
|