2017-09-24 6 views
1

OSXで2.4.0を実行しています。 次脚本...フィルタ式を使用するとjson_queryが出力される可能性があります

--- 
- hosts: localhost 
    connection: local 
    gather_facts: False 

    vars: 
    data: 
    - name: thing1 
     desc: I am thing 1 
    - name: thing2 
     desc: I am thing 2 

    tasks: 
    - debug: msg="{{ data|json_query(\"[1].desc\") }}" 
    - debug: msg="{{ data|json_query(\"[?name=='thing2'].desc\") }}" 

は、次の出力を生成します。

PLAY [localhost] *************************************************************** 

TASK [debug] ******************************************************************* 
ok: [localhost] => { 
    "msg": "I am thing 2" 
} 

TASK [debug] ******************************************************************* 
ok: [localhost] => { 
    "msg": [ 
     "I am thing 2" 
    ] 
} 

PLAY RECAP ********************************************************************* 
localhost     : ok=2 changed=0 unreachable=0 failed=0 

私の質問は、なぜ、二デバッグタスクにリスト([])で出力されますか?

答えて

1

implementation behind json_queryのJMESPathでは、インデックス式は常に単一の値、つまりnullsee [1])を返すように定義されています。

投影であるフィルタ式では、クエリのLHSを評価した後に配列が返されますが、値が一致しない場合は空になることがあります(see: [2])。

関連する問題