JSONPATH 过滤器无法匹配值

时间:2021-04-20 21:23:35

标签: json jsonpath

嗨,我正在尝试根据值过滤一些 oid。例如:我想返回值小于 1000 的 OID

[
    {
    "_id": {
      "$oid": "607f24106f097b42ba7dea5e"
    },
    "SNMP_ONTOLOGIA": {
      "oid": "1.3.6.1.4.1.6527.6.1.2.2.20.6.3.1.10",
      "value": 833
    },
    "contextData": {
      "deviceTemplate": null,
      "device": null,
      "clientConnection": null,
      "clientSession": null,
      "user": "administrator",
      "timezoneId": "UTC",
      "timestamp": "2021-04-20T18:57:20Z",
      "timestampMillis": 1618945040731,
      "source": "FLOWENGINE"
    }
  },
  {
    "_id": {
      "$oid": "607f2f576f097b42ba7dea62"
    },
    "SNMP_ONTOLOGIA": {
      "oid": "1.3.6.1.4.1.2011.5.100.1.1.30.12",
      "value": 25505
    },
    "contextData": {
      "deviceTemplate": null,
      "device": null,
      "clientConnection": null,
      "clientSession": null,
      "user": "administrator",
      "timezoneId": "UTC",
      "timestamp": "2021-04-20T19:45:27Z",
      "timestampMillis": 1618947927982,
      "source": "FLOWENGINE"
    }
  }
]

我已经尝试过 https://jsonpath.com/ 这些语法:

<块引用>

$..SNMP_ONTOLOGIA[?(@.value < 1000)]

$..SNMP_ONTOLOGIA[?(@.value < 1000)].oid

我不明白为什么这本书的例子和上面的例子没有。

链接https://support.smartbear.com/alertsite/docs/monitors/api/endpoint/jsonpath.html#examples

语法

<块引用>

$..book[?(@.price > 4)]

enter image description here

1 个答案:

答案 0 :(得分:0)

我真的很感激有人可以向我解释一下它是如何工作的。但我是这样管理的:

> jp.query(SNMP, '$..[?(@.value > 10)]');
[
  { oid: '1.3.6.1.4.1.6527.6.1.2.2.20.6.3.1.10', value: 833 },
  { oid: '1.3.6.1.4.1.2011.5.100.1.1.30.12', value: 25505 }
]
>
>
> jp.query(SNMP, '$..[?(@.value < 1000)]');
[ { oid: '1.3.6.1.4.1.6527.6.1.2.2.20.6.3.1.10', value: 833 } ]
> jp.query(SNMP, '$..[?(@.value < 1000)].oid');
[ '1.3.6.1.4.1.6527.6.1.2.2.20.6.3.1.10' ]

ps: 使用 require('jsonpath') npm 包

ps2:对于最初所说的 OID

jp.query(SNMP, '$..[?(@.oid == \'1.3.6.1.4.1.6527.6.1.2.2.20.6.3.1.10\')].value');
[ 833 ]