背景
我在JSON中有以下示例数据结构:
{'sensor' : [
{'assertions_enabled': 'ucr+',
'deassertions_enabled': 'ucr+',
'entity_id': '7.0',
'lower_critical': 'na',
'lower_non_critical': 'na',
'lower_non_recoverable': 'na',
'reading_type': 'analog',
'sensor_id': 'SR5680 TEMP (0x5d)',
'sensor_reading': {'confidence_interval': '0.500',
'units': 'degrees C',
'value': '42'},
'sensor_type': 'Temperature',
'status': 'ok',
'upper_critical': '59.000',
'upper_non_critical': 'na',
'upper_non_recoverable': 'na'}
]}
传感器列表实际上包含许多包含传感器信息的dicts。
问题:
我正在尝试使用jsonpath查询列表以返回我的sensor_type=='Temperature'
传感器序列的子集但我得到'False'
返回(不匹配)。这是我的jsonpath表达式:
results = jsonpath.jsonpath(ipmi_node, "$.sensor[?(@.['sensor_type']=='Temperature')]")
当我删除过滤器表达式并使用"$.sensor.*"
时,我会得到所有传感器的列表,所以我确定问题出在过滤器表达式中。
我已经扫描了多个网站/帖子的例子,我似乎找不到任何特定的Python(Javascript和PHP似乎更突出)。有人可以提供一些指导吗?
答案 0 :(得分:4)
以下表达式可以满足您的需要(注意如何指定属性):
jsonpath.jsonpath(impi_node, "$.sensor[?(@.sensor_type=='Temperature')]")
答案 1 :(得分:1)
我正在使用jsonpath-ng,它似乎处于活动状态(截至20.11.20),并且我提供了基于Pedro的jsonpath表达式的解决方案:
data = {
'sensor' : [
{'sensor_type': 'Temperature', 'id': '1'},
{'sensor_type': 'Humidity' , 'id': '2'},
{'sensor_type': 'Temperature', 'id': '3'},
{'sensor_type': 'Density' , 'id': '4'}
]}
from jsonpath_ng.ext import parser
for match in parser.parse("$.sensor[?(@.sensor_type=='Temperature')]").find(data):
print(match.value)
输出:
{'sensor_type': 'Temperature', 'id': '1'}
{'sensor_type': 'Temperature', 'id': '3'}
注意:除了项目主页上提供的基本文档之外,我还在tests中找到了更多信息。