2017-02-03 2 views
1

このサンプルJSONを考えてみましょう:JsonPathの "does not include"の構文、またはネガティブマッチング?

{ 
    "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 

そこには他の良い例がたくさんあります。彼らがドキュメンテーションに入っていればいいだろう!