2016-11-05 4 views
1

Учитывая JSON ниже:Проверка несколько условий существования, JSONpath

{ 
    "store": { 
     "book": [ 
      { 
       "author": "Nigel Rees", 
       "title": "Sayings of the Century" 
      }, 
      { 
       "category": "fiction", 
       "title": "Sword of Honour", 
       "price": 12.99 
      } 
     ] 
} 

Как я могу построить путь JSON для извлечения book элементов, которые имеют category, price и title элементов? Я пробовал $.store.book[?(@.price && @.category && @.title)], но это не работает (кажется, что такой предикат не позволяет использовать несколько условий). Есть идеи? Вот ссылка на удобный тестер: https://jsonpath.curiousconcept.com/

+1

Путь на самом деле отлично работает с портом Java из [JsonPath] (https://github.com/ jayway/JsonPath). Операторы '&&' и '' '' доступны только в порту Java; онлайн-тестер использует другую реализацию. – approxiblue

ответ

0

Мне не удалось найти способ сделать это с помощью встроенных фильтров. Тем не менее, можно сделать это с помощью объекта фильтра:

Filter f = filter(where("price").exists(true).and(where("category").exists(true).and(where("titles").exists(true)); 

При вызове чтения: JsonPath.read(json, "$.store.book[?]", f);

Смежные вопросы