jqを取得して、次のようにjsonを取得するにはどうすればよいですか?
{
"Host1": { "ip": "10.1.2.3" },
"Host2": { "ip": "10.1.2.2" },
"Host3": { "ip": "10.1.18.1" }
}
この出力を生成します:
Host1, 10.1.2.3
Host2, 10.1.2.2
Host3, 10.1.18.1
書式設定には興味がありません。キーの名前と値にアクセスする方法がわかりません。
最上位キーをストリームとして取得するには、keys []を使用できます。したがって、特定の問題に対する1つの解決策は次のとおりです。
jq -r 'keys[] as $k | "\($k), \(.[$k] | .ip)"'
keys
は、ソートされた順序でキー名を生成します。元の順序で使用する場合は、keys_unsorted
を使用します。
元の順序でキーを生成する別の方法は次のとおりです。
jq -r 'to_entries[] | "\(.key), \(.value | .ip)"'
@csvおよび@tsvフィルターもここで検討する価値があります。
jq -r 'to_entries[] | [.key, .value.ip] | @tsv'
生成するもの:
Host1 10.1.2.3
Host2 10.1.2.2
Host3 10.1.18.1
非常にエレガントなソリューションに出くわした
jq 'with_entries(.value |= .ip)'
どの出力
{
"Host1": "10.1.2.3",
"Host2": "10.1.2.2",
"Host3": "10.1.18.1"
}
ここで遊ぶjqplayスニペットは次のとおりです。 https://jqplay.org/s/Jb_fnBveMQ
関数with_entries
は、オブジェクトのリスト内の各オブジェクトをキー/値ペアに変換します。したがって、それぞれ.key
または.value
にアクセスでき、すべてのKVアイテムを更新(上書き)します.value
フィールドで.ip
更新|=
演算子を使用して