1

Objective:

  • I have a JSON with an array of JSON objects.
  • I want to return only array objects that have certain members (string:element) with particular strings.
  • Of those filtered objects in the array, I want to return only the filtered strings, not the whole object.
  • All tests are being made at https://jsonpath.herokuapp.com.

I have advanced a bit, after this previous question was solved.

Consider the following 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"
            }
         ]
      }
   }
]

On a JsonPath (Java JayWay) parser, the following path:
[?(@.B && @.C && @.D.G)]['B','C','D']

returns:
- only objects that have B, C and D.G.
- for each object, it returns only B, C and 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"
            }
         ]
      }
   }
]

What is missing:

  • This solution still returns E (D.E), and has G nested.
  • Ideally, I would like to return only:
    • B, C, and G. or
    • B, C and D.G.

thanks

Humberto
  • 99
  • 12

0 Answers0