JsonPath (JayWay), который возвращает только определенные ключи для объектов в массиве JSON, которые имеют эти ключи - PullRequest
1 голос
/ 03 апреля 2019

Цель:

  • У меня есть JSON с массивом объектов JSON.
  • Я хочу вернуть только объекты массива, которые имеют определенные члены (string: element) с определенными строками.
  • Из этих отфильтрованных объектов в массиве я хочу вернуть только отфильтрованные строки, а не весь объект.
  • Все тесты выполняются в https://jsonpath.herokuapp.com.

Я немного продвинулся, после этого предыдущий вопрос был решен.

Рассмотрим следующий JSON

[  
   {  
      "A":"val1",
      "B":"val2",
      "C":"val3",
      "D":{  
         "E":[  
            {  
               "F":"val4"
            }
         ],
         "G":[  
            {  
               "H":"val5",
               "I":"val6",
               "J":"val7"
            }
         ]
      }
   },
   {  
      "A":"val8",
      "B":"val9",
      "C":"val10",
      "D":{  
         "E":[  
            {  
               "F":"val11"
            }
         ],
         "G":[  
            {  
               "H":"val12",
               "I":"val13",
               "J":"val14"
            }
         ]
      }
   },
   {  
      "A":"val15",
      "B":"val16"
   },
   {  
      "A":"val8",
      "B":"val9",
      "C":"val10",
      "D":{  
         "E":[  
            {  
               "F":"val11"
            }
         ]
      }
   }
]

В синтаксическом анализаторе JsonPath (Java JayWay) следующий путь:
[?(@.B && @.C && @.D.G)]['B','C','D']

возвращает:
-только объекты, имеющие B, C и DG
- для каждого объекта он возвращает только B, C и D.

[
   {
      "B" : "val2",
      "C" : "val3",
      "D" : {
         "E" : [
            {
               "F" : "val4"
            }
         ],
         "G" : [
            {
               "H" : "val5",
               "I" : "val6",
               "J" : "val7"
            }
         ]
      }
   },
   {
      "B" : "val9",
      "C" : "val10",
      "D" : {
         "E" : [
            {
               "F" : "val11"
            }
         ],
         "G" : [
            {
               "H" : "val12",
               "I" : "val13",
               "J" : "val14"
            }
         ]
      }
   }
]

Чего не хватает:

  • Это решениепо-прежнему возвращает E (DE) и имеет вложенную G.
  • В идеале я хотел бы вернуть только:
    • B, C и G. или
    • B, Cи DG

спасибо

...