3

バックグラウンド:

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

センサーリストには、実際にはセンサー情報を含むこれらのdictの多くが含まれます。

問題:

jsonpathを使用してリストをクエリし、センサーdictのサブセットを返そうとしていますが、sensor_type=='Temperature'返されます'False'(一致しません)。これが私のjsonpath式です:

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

フィルタ式を削除して使用する"$.sensor.*"と、すべてのセンサーのリストが表示されるので、問題はフィルタ式にあると確信しています。

例として複数のサイト/投稿をスキャンしましたが、Pythonに固有のものが見つからないようです(JavascriptとPHPの方が目立つようです)。誰かがいくつかのガイダンスを提供できますか?

4

2 に答える 2

5

次の式は、必要なことを実行します(属性がどのように指定されているかに注意してください)。

jsonpath.jsonpath(impi_node, "$.sensor[?(@.sensor_type=='Temperature')]")
于 2012-09-09T22:29:44.647 に答える
4

私はアクティブに見えるjsonpath-ngを使用しています(23.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'}

注:プロジェクトのホームページで提供されている基本的なドキュメントに加えて、テストで追加情報を見つけました。

于 2020-11-23T14:26:27.350 に答える