jsonpathjayway

How to filter on missing field in jsonpath (Jayway)


In Jsonpath (Jayway Java implementation), how do I find array elements where a certain field is missing? For example, in the below JSON, how do I find books without isbn?

In theory, empty(true) predicate should do the trick: $.store.book[?(@.isbn empty true)]. This doesn't work though (bug?). Only empty(false) returns results. Searching for null or zero-length values also does not produce the desired result.

{
   "store" : {
      "book" : [
         {
            "category" : "reference",
            "author" : "Nigel Rees",
            "title" : "Sayings of the Century",
            "price" : 8.95
         },
         {
            "category" : "fiction",
            "author" : "Evelyn Waugh",
            "title" : "Sword of Honour",
            "price" : 12.99
         },
         {
            "category" : "fiction",
            "author" : "Herman Melville",
            "title" : "Moby Dick",
            "isbn" : "0-553-21311-3",
            "price" : 8.99
         },
         {
            "category" : "fiction",
            "author" : "J. R. R. Tolkien",
            "title" : "The Lord of the Rings",
            "isbn" : "0-395-19395-8",
            "price" : 22.99
         }
      ],
      "bicycle" : {
         "color" : "red",
         "price" : 19.95
      }
   },
   "expensive" : 10
}


Solution

  • Found a solution using regex filtering: $.store.book[?(@.isbn =~ //)]