Поиск элемента по известному значению элемента в массиве элемента в массиве

#json #jsonpath

Вопрос:

У меня есть известное значение для элемента ENTRYID в моем документе JSON. Я хочу получить Tasks.Id для элемента Tasks , который ENTRYID соответствует моему известному значению. Проблема в том, что ENTRYID она немного скрыта внутри Tasks . В качестве примера приведем путь JSON для поиска первого ENTRYID в документе.

 $.Tasks[0].Activities[0].Entry.AnswersFlat[0].ENTRYID
 

Для перехода к ENTRYID элементу из Tasks элемента он всегда находится внутри Activities[0].Entry.AnswersFlat[0] . Эти два массива не нуждаются в поиске.

Я знаю, что могу использовать ?(@.Tag == 'Known Value') для поиска элементов, содержащих известное значение для определенного имени тега, но когда я пытаюсь использовать его в своем пути JSON, я продолжаю получать ошибки. Я пытался:

 $.Tasks[?(@.Activities[0].Entry.AnswersFlat[0].ENTRYID=='95B53C6CF6104F0E86B5744083A22FAD')].Id
 

Но это возвращает ошибку.

Я также пытался вложить фильтры, но это также возвращает ошибку :

 $.Tasks[?(@.Activites[?(@.Entry.AnswersFlat[?(@.ENTRYID=='95B53C6CF6104F0E86B5744083A22FAD')])])].Id
 

Каков правильный синтаксис в пути JSON, чтобы получить значение Tasks.Id для моего известного значения ENTRYID ?

Я создал очень упрощенную версию своего документа для вашей справки:

 {
   "Tasks":[
      {
         "Id":"652a187f2a584a0f84aaadb9016cfa4b",
         "Activities":[
            {
               "Entry":{
                  "AnswersFlat":[
                     {
                        "ENTRYID":"95B53C6CF6104F0E86B5744083A22FAD"
                     }
                  ]
               }
            }
         ]
      },
      {
         "Id":"e586073810a746cca440adb901090326",
         "Activities":[
            {
               "Entry":{
                  "AnswersFlat":[
                     {
                        "ENTRYID":"7FD608F3F9E24EB084F58A1245677B3D"
                     }
                  ]
               }
            }
         ]
      }
   ]
}
 

Комментарии:

1. В итоге я переключил вывод данных на XML вместо JSON, и мне было так легко получить то, что я хотел. //Task[.//ENTRYID="95B53C6CF6104F0E86B5744083A22FAD"]/Id

2. $.Tasks[?(@.Activities[0].Entry.AnswersFlat[0].ENTRYID=='95B53C6CF6104F0E86B5744083A22FAD')].Id дает точный результат в jsonpath.com . Какую реализацию jsonpath вы используете и на каком языке?

3. @AkshayG Я поражен, раздражен и удивлен тем, что у меня уже был ответ и я не мог заставить его работать. Спасибо.

4. @AkshayG Я был на этом сайте, настройки по умолчанию, и когда я запускаю те же строки, это выдает мне ошибку… Я больше никогда не буду пользоваться этим сайтом…