在 Python 中,使用 jsonpath-rw 获取特定属性的值 (json/dict)
In Python, using jsonpath-rw to get values for specific attribute (json/dict)
这是我的 json:
{
'test': [
{ "id": "1", "description": "Test 1" },
{ "id": "2", "description": "Test 2" }
]
}
我正在尝试获取 id 的值,其中 description 是 "Test 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']
这是我的 json:
{
'test': [
{ "id": "1", "description": "Test 1" },
{ "id": "2", "description": "Test 2" }
]
}
我正在尝试获取 id 的值,其中 description 是 "Test 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']