Python JSONPath 过滤器表达式错误,jsonpath-rw 1.4.0 的意外字符
Python JSONPath Filter expressions error, Unexpected character for jsonpath-rw 1.4.0
我安装了 jsonpath-rw 1.4.0
sudo apt-get install python-jsonpath-rw
附带一个 /usr/bin/jsonpath
。但这在使用过滤器表达式时给我带来了错误:
$ jsonpath '$..book[?(@.price < 10)]' book.json
Traceback (most recent call last):
File "/usr/bin/jsonpath", line 11, in <module>
load_entry_point('jsonpath-rw==1.4.0', 'console_scripts', 'jsonpath.py')()
File "/usr/lib/python2.7/dist-packages/jsonpath_rw/bin/jsonpath.py", line 71, in entry_point
main(*sys.argv)
File "/usr/lib/python2.7/dist-packages/jsonpath_rw/bin/jsonpath.py", line 57, in main
expr = parse(args.expression)
File "/usr/lib/python2.7/dist-packages/jsonpath_rw/parser.py", line 14, in parse
return JsonPathParser().parse(string)
File "/usr/lib/python2.7/dist-packages/jsonpath_rw/parser.py", line 32, in parse
return self.parse_token_stream(lexer.tokenize(string))
File "/usr/lib/python2.7/dist-packages/jsonpath_rw/parser.py", line 55, in parse_token_stream
return new_parser.parse(lexer = IteratorToTokenStream(token_iterator))
File "/usr/lib/python2.7/dist-packages/ply/yacc.py", line 331, in parse
return self.parseopt_notrack(input, lexer, debug, tracking, tokenfunc)
File "/usr/lib/python2.7/dist-packages/ply/yacc.py", line 1061, in parseopt_notrack
lookahead = get_token() # Get the next token
File "/usr/lib/python2.7/dist-packages/jsonpath_rw/parser.py", line 179, in token
return next(self.iterator)
File "/usr/lib/python2.7/dist-packages/jsonpath_rw/lexer.py", line 33, in tokenize
t = new_lexer.token()
File "/usr/lib/python2.7/dist-packages/ply/lex.py", line 393, in token
newtok = self.lexerrorf(tok)
File "/usr/lib/python2.7/dist-packages/jsonpath_rw/lexer.py", line 165, in t_error
raise JsonPathLexerError('Error on line %s, col %s: Unexpected character: %s ' % (t.lexer.lineno, t.lexpos - t.lexer.latest_newline, t.value[0]))
jsonpath_rw.lexer.JsonPathLexerError: Error on line 1, col 8: Unexpected character: ?
那么jsonpath-rw 1.4.0是不是不支持Filter表达式了?
好像是working fine according to this blog post,不过那是2015年了。
从那以后情况有变化吗?
我使用 jsonpath-rw-ext
而不是 jsonpath-rw
来完成这项工作。这似乎是支持过滤器扩展的那个。
我安装了 jsonpath-rw 1.4.0
sudo apt-get install python-jsonpath-rw
附带一个 /usr/bin/jsonpath
。但这在使用过滤器表达式时给我带来了错误:
$ jsonpath '$..book[?(@.price < 10)]' book.json
Traceback (most recent call last):
File "/usr/bin/jsonpath", line 11, in <module>
load_entry_point('jsonpath-rw==1.4.0', 'console_scripts', 'jsonpath.py')()
File "/usr/lib/python2.7/dist-packages/jsonpath_rw/bin/jsonpath.py", line 71, in entry_point
main(*sys.argv)
File "/usr/lib/python2.7/dist-packages/jsonpath_rw/bin/jsonpath.py", line 57, in main
expr = parse(args.expression)
File "/usr/lib/python2.7/dist-packages/jsonpath_rw/parser.py", line 14, in parse
return JsonPathParser().parse(string)
File "/usr/lib/python2.7/dist-packages/jsonpath_rw/parser.py", line 32, in parse
return self.parse_token_stream(lexer.tokenize(string))
File "/usr/lib/python2.7/dist-packages/jsonpath_rw/parser.py", line 55, in parse_token_stream
return new_parser.parse(lexer = IteratorToTokenStream(token_iterator))
File "/usr/lib/python2.7/dist-packages/ply/yacc.py", line 331, in parse
return self.parseopt_notrack(input, lexer, debug, tracking, tokenfunc)
File "/usr/lib/python2.7/dist-packages/ply/yacc.py", line 1061, in parseopt_notrack
lookahead = get_token() # Get the next token
File "/usr/lib/python2.7/dist-packages/jsonpath_rw/parser.py", line 179, in token
return next(self.iterator)
File "/usr/lib/python2.7/dist-packages/jsonpath_rw/lexer.py", line 33, in tokenize
t = new_lexer.token()
File "/usr/lib/python2.7/dist-packages/ply/lex.py", line 393, in token
newtok = self.lexerrorf(tok)
File "/usr/lib/python2.7/dist-packages/jsonpath_rw/lexer.py", line 165, in t_error
raise JsonPathLexerError('Error on line %s, col %s: Unexpected character: %s ' % (t.lexer.lineno, t.lexpos - t.lexer.latest_newline, t.value[0]))
jsonpath_rw.lexer.JsonPathLexerError: Error on line 1, col 8: Unexpected character: ?
那么jsonpath-rw 1.4.0是不是不支持Filter表达式了?
好像是working fine according to this blog post,不过那是2015年了。
从那以后情况有变化吗?
我使用 jsonpath-rw-ext
而不是 jsonpath-rw
来完成这项工作。这似乎是支持过滤器扩展的那个。