2017-12-05 8 views
0

私はJSONデータ構造体(実際にはYAML)を持っていて、構造体を再フォーマットしたいが、これを正しく動作させる方法を理解することはできません。これはAnsibleのjinja2テンプレート内で使用されます。私が使用しようとしたツールは、JMESPathを使用するjson_queryフィルタです。JMESPath - ツリーをプルーニングする方法

入力:

"users": { 
    "Administrators": [ 
    "user1", 
    "user2": { 
     "ssh_keys": "...." 
    }, 
    "user3" 
    ], 
    "Users": [ 
    "user4" 
    ] 
} 

私はJinja2の中にいることをどのように行うことができます

"Administrators": [ 
    "user1", 
    "user2", 
    "user3" 
], 
"Users": [ 
    "user4" 
] 

(プロセスでssh_key部分を除去)このにこのJSONを改革したいと思いますか?私は仕事のための適切なツールのように見えるが、私が探しているものを達成するクエリを見つけていないjson_queryフィルタを見つけました。

答えて

1

あなたができるならば、私は最初にjsonを再フォーマットします。 良いフォーマットは、例えば、これは非常に簡単になるだろう:

"users": { 
    "Administrators": [ 
    {"name": "user1, "ssh_keys": None}, 
    {"name": "user2, "ssh_keys": "...."}, 
    {"name": "user3, "ssh_keys": None}, 
    ], 
    "Users": [ 
    "user4" 
    ] 
} 

をそうすることが、あなたができない場合には、(これはAdministratorsを参照するが、何のために適用されます)、これを試してみてください。

- set_fact: 
     admins: "{{ (users | json_query(item) | default([])) | union(admins | default([])) }}" 
    with_items: 
     - "Administrators[?type(@) == 'object'][keys(@)][][]" 
     - "Administrators[?type(@)=='string']" 

これでしょうユーザーjsonのユーザー名のみを使用してadminsアレイを作成します。 管理者とユーザーを含む別のファクトを設定できるよりも

+0

ありがとうございました!私の場合、最初の解決策は実際には選択肢でしたが、2番目のアプローチを知っておくことも良いことです。 –

関連する問題