2017-02-03 20 views
1

Рассмотрим этот пример JSON:Синтаксис JsonPath для "не включает" или отрицательное соответствие?

{ 
    "thing": [ 
    { 
     "name": "foo", 
     "flag": "yep" 
    }, 
    { 
     "name": "bar" 
    }, 
    { 
     "name": "baz", 
     "flag": "nope" 
    } 
    ] 
} 

Если бы я хотел, чтобы найти все элементы «Название», который имел соответствующий «флаг», я мог бы использовать что-то вроде этого:

$.thing[?(@.flag)].name 

Я бы получить обратно результаты:

'0' => "foo" 
'1' => "baz" 

Но что, если я хотел, чтобы найти все элементы «имя», которые не имеют соответствующих «флаг»?

(для целей данного вопроса, я не забочусь о значении «флаг», только ли это или нет присутствует)

ответ

1

Я порылся в исходном коде JsonPath here (и, в частности here) и нашел этот тест:

@Test 
public void a_not_exists_filter_can_be_serialized() { 

    String filter = filter(where("a").exists(false)).toString(); 
    String parsed = parse("[?([email protected]['a'])]").toString(); 

    assertThat(filter).isEqualTo(parsed); 
} 

Так что синтаксис для этого негативной спички я ищу просто быть:

$.thing[?([email protected])].name 

Там Здесь много других хороших примеров. Было бы неплохо, если бы они были в документации!

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

  • Нет связанных вопросов^_^