私はこのような長い配列を得ました
{
"id": "byu6g6c4cjys5mdkg5znh8ju8c",
"create_at": 1511875272294,
"update_at": 1511875272294,
"delete_at": 0,
"display_name": "BMA",
"name": "BMA",
"description": "",
"email": "[email protected]",
"type": "O",
"company_name": "",
"allowed_domains": "",
"invite_id": "gdgz1tbxuinntx1fbr1ax7kehy",
"allow_open_invite": false,
"scheme_id": null
}
JQでBMAというIDを取得したいです。現在、 "jq -r '.[]["name"]" を解析し、カールの出力を名前でフィルタリングでき、100 個の異なる名前で "BMA" を取得できますが、名前のある ID だけをフィルタリングするだけです。 。 = BMA 。どんなアイデアがありますか?
答え1
ジャック
次の方法でこれを行うことができます。
jq '.[] | select( .name == "BMA" ).id'
名前がある場合BMA
は.id
。
シェル変数の値を使用するには、次のようjq
にインポートします--arg
。
myvariable=BMA
jq --arg name "$myvariable" '.[] | select( .name == $name ).id'
json -c 'this.name === "BMA"' -a id
答え2
jqソリューションの代替は次のとおりです。jtc
:
bash $ jtc -w'[name]:<BMA>+0 [-1] [id]' input.json
"byu6g6c4cjys5mdkg5znh8ju8c"
bash $
答え3
使用ミラー()、まず大きなmlr
配列から関連項目(などの項目name
)を抽出し、選択した項目からフィールドを抽出します。BMA
id
mlr --j2n filter '$name == "BMA"' then cut -f id file
この--j2n
オプションはmlr
JSONを読み取り、「インデックス/キット」出力(デフォルトではデータのみ)を生成するように呼び出しに指示します。
byu6g6c4cjys5mdkg5znh8ju8c
質問テキストに含まれるオブジェクトのJSON配列を含むファイルがある場合は、1行に単一の文字列が出力されます。