2012-09-09 116 views
2

背景:的Python jsonpath過濾器表達式

我在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'} 
]} 

的傳感器列表實際上將包含許多含有傳感器信息這些類型的字典。

問題:

我試圖用jsonpath返回我有sensor_type=='Temperature'傳感器類型的字典的一個子集來查詢列表,但我得到'False'返回(不匹配)。這裏是我的jsonpath表達:

results = jsonpath.jsonpath(ipmi_node, "$.sensor[?(@.['sensor_type']=='Temperature')]") 

當我刪除篩選表達式,只是用"$.sensor.*"我得到的所有傳感器的列表,所以我相信這個問題是在過濾器表達式。

我已經掃描了多個網站/文章的例子,我似乎無法找到任何具體的Python(Javascript和PHP似乎更突出)。任何人都可以提供一些指導嗎?

回答

3

下面的表達式做你所需要的(注意是如何規定的屬性):

jsonpath.jsonpath(impi_node, "$.sensor[?(@.sensor_type=='Temperature')]") 
+0

其實,結束了我的工作是消除了「」在@。['sensor_type']中。顯然它只是@ ['sensor_type']。 –

+0

這兩種形式可能是有效的。 –

+0

你在哪裏找到了「jsonpath」,這裏沒有鏈接似乎是 https://pypi.python.org/simple/jsonpath/? – avloss