JQ(NAMEに基づいてIDを取得)

JQ(NAMEに基づいてIDを取得)

私はこのような長い配列を得ました

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

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)を抽出し、選択した項目からフィールドを抽出します。BMAid

mlr --j2n filter '$name == "BMA"' then cut -f id file

この--j2nオプションはmlrJSONを読み取り、「インデックス/キット」出力(デフォルトではデータのみ)を生成するように呼び出しに指示します。

byu6g6c4cjys5mdkg5znh8ju8c質問テキストに含まれるオブジェクトのJSON配列を含むファイルがある場合は、1行に単一の文字列が出力されます。

関連情報