这是我的json:

{
   'test': [
        { "id": "1", "description": "Test 1" },
        { "id": "2", "description": "Test 2" }
    ]
}

我正在尝试获取 id 的值,其中说明是“测试1”。

我在JsonPath页面上找到了以下示例:
$..book[?(@.price<10)]

尝试解析以下jsonxpath表达式时:
parse('$..test[?(@.description="Test 1")].id')

我收到以下错误:
jsonpath_rw.lexer.JsonPathLexerError: Error on line 1, col 7: Unexpected character: ?

我究竟做错了什么?另外,还有更好的方法吗?

最佳答案

看来jsonpath-rw不支持此功能。也许考虑另一个图书馆? ObjectPath 看起来很有希望:

>>> import objectpath
>>> json_obj = { ... } # This has to be pre-parsed
>>> tree = objectpath.Tree(json_obj)
>>> ids = tree.execute('$..test[@.description is "Test 1"].id')
>>> print list(ids)
["1"]

它并没有完全遵循JsonPath语法,但是至少在敷衍调查中,它非常相似。 Documentation也可用。

当然,如果您的JSON始终采用相同的格式(即您不必处理丢失的子对象等),则可以使用列表推导或类似方法轻松地执行相同的查询。
json = { ... }
ids = [t['id'] for t in json['test'] if t['description'] == 'Test 1']

关于python - 在Python中,使用jsonpath-rw获取特定属性的值(json/dict),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30419104/

10-12 21:47