ilo6からIPMIで取得したjsonをパースする方法

お世話になります。

1点、不明点があるのでご教示ください。

以下のようなjsonから"id": "Power Supplies"配下の"state": 2,の値の「2」を取得したいと考えています。

[
...
{
"id": "Power Supplies",
"name": "(19.1).Power Supplies",
"sensor": {
"type": 8,
"text": "power_supply"
},
"reading": {
"type": 11,
"text": "discrete_redundancy"
},
"state": {
"state": 2,
"text": "redundancy lost"
}
},
{
"id": "Power Meter",
"name": "(7.1).Power Meter",
"sensor": {
"type": 11,
"text": "other_units_based_sensor"
},
"reading": {
"type": 1,
"text": "threshold"
},
"state": {
"state": 0,
"text": ""
},
"value": 50.000000,
"units": "watts",
"threshold": {
"lower": {},
"upper": {}
}
},
....

]

以下URLを参考に、アイテム設定の前処理で、$[?(@.id=='Power Supplies')].state.stateを記述すると以下のエラーが発生して取得できません。
記述方法が間違っているとか考えていますが、認識が異なっている箇所があれば、ご教示ください。
※json parseは、アイテム設定の前処理で、「テスト」ボタンを押下して確認しています。

エラー:
cannot extract value from json by path "$.[?(@.id=='Power Supplies')].state.state": invalid object format, expected opening character '{' or '[' at: ''

4 JSONPath functionality
https://www.zabbix.com/documentation/current/en/manual/config/items/prep...

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー TNK の写真

テストする際、実際の値を取得してテストされましたか?
手で、JSONの一部だけ入力してテストされたのではないですか?

簡易なテストが行えるサイトを活用して、JSONPathの記述によって得られる値の変化を確認してみてはいかがでしょうか?
https://jsonpath.com/

ユーザー masaki10 の写真

TNKさん

ご返信いただき、ありがとうございます。

はい、実際の値(JSON全文)でテストしており、jsonpath.com試しております。

jsonpath.comでは、JSON全文を貼り付け、一番単純な「$..[0]」で0番目の配列のみ取得可能ですが、
Zabbbixのアイテムの前処理で同様に「$..[0]」でテストすると、投稿時と同じ以下エラーが発生します。

cannot extract value from json by path "$..[0]": invalid object format, expected opening character '{' or '[' at: ''

JSON文字列は、IPMIから「ipmi.get」で全文を取得したアイテムAを作成しており、
依存関係のアイテムBで、parseしています。

1点気になることは、このJSONは配列の"[]"から始まっているので、zabbixのparserは、"[]"から始まるJSONは解析できない or 他の前処理が必要なのかなと考えていますが、
同様の現象が発生している方がいらっしゃれば、幸いだと考えています。

以上です。
よろしくお願いいたします。

ユーザー masaki10 の写真

TNKさん

ご返信いただき、ありがとうございます。

はい、実際の値(JSON全文)でテストしており、jsonpath.com試しております。

jsonpath.comでは、JSON全文を貼り付け、一番単純な「$..[0]」で0番目の配列のみ取得可能ですが、
Zabbbixのアイテムの前処理で同様に「$..[0]」でテストすると、投稿時と同じ以下エラーが発生します。

cannot extract value from json by path "$..[0]": invalid object format, expected opening character '{' or '[' at: ''

JSON文字列は、IPMIから「ipmi.get」で全文を取得したアイテムAを作成しており、
依存関係のアイテムBで、parseしています。

1点気になることは、このJSONは配列の"[]"から始まっているので、zabbixのparserは、"[]"から始まるJSONは解析できない or 他の前処理が必要なのかなと考えていますが、
同様の現象が発生している方がいらっしゃれば、幸いだと考えています。

以上です。
よろしくお願いいたします。

ユーザー masaki10 の写真

TNKさん

本件、自己解決したので報告します。

内容は、単純(Zabbixの使い方が間違っていた)で、保存前処理のテスト画面で、「値」項目に
何も記入せずに「テスト」ボタンを押下していたのが、原因でした。

「値」項目に、JSON全文を貼り付け、テストを実施したら、想定通りの値が取得できました。
お騒がせして申し訳ございません。

以上です。
よろしくお願いいたします。