Как проверить несколько ключей в JsonPath

Я пытаюсь найти объект в массиве JSON, используя JsonPath. Вот мой JSON:

[
  {
    "bpm": "766",
    "time": "20:14:57",
    "confidence": "0"
  },
  {
    "bpm": "766",
    "time": "20:14:57",
    "confidence": "0"
  },
  {
    "bpm": "767",
    "time": "20:14:33",
    "confidence": "0"
  }
]

Я использую SelectToken со следующим запросом JsonPath, чтобы попытаться найти объект JSON, используя два ключа bpm и time. Между bpm и time должен быть оператор and.

Вот мой запрос:

$.[?(@.bpm=='767',@.time=='20:14:33')]

Но я получаю сообщение об ошибке, говорящее о том, что после '767' есть неожиданный символ ,. Что я делаю не так?


person Salman Arshad    schedule 28.04.2020    source источник


Ответы (1)


В реализации JsonPath от Newtonsoft оператор and представляет собой двойной амперсанд &&, а не запятую ,. Измените свое выражение, как показано ниже, и оно должно работать правильно:

var array = JArray.Parse(json);
var obj = array.SelectToken("$.[?(@.bpm=='767' && @.time=='20:14:33')]");

Скрипт: https://dotnetfiddle.net/gpU56p

person Brian Rogers    schedule 28.04.2020