2016-06-14 27 views
0

私は、次のcurlコマンドを使用しています:bashを使用してjsonから "name"値を取り出す方法は?

curl -s -v --user admin:orca --insecure -X GET https://insecure.registry.com/api/v0/repositories/authi-api/tags 

は、次の出力行き方:

{ 
    "name": "Dev_ReleaseRollout_Lane-3", 
    "inRegistry": true, 
    "hashMismatch": false, 
    "inNotary": false 
    }, 
    { 
    "name": "Dev_ReleaseRollout_Lane-latest", 
    "inRegistry": true, 
    "hashMismatch": false, 
    "inNotary": false 
    }, 
    { 
    "name": "Payments_Dev_Lane-267", 
    "inRegistry": true, 
    "hashMismatch": false, 
    "inNotary": false 
    } 

を私は変数にのみnameの値を取得したいです。 [].nameは内の各要素から名前を取り、.が配列され、それはかなり簡単です

$ curl ... | jq -r '.[].name' 
Dev_ReleaseRollout_Lane-3 
Dev_ReleaseRollout_Lane-latest 
Payments_Dev_Lane-267 


私はあなたが実際に3つのオブジェクトの周りの配列を持っていると仮定すると、変数

+0

これまでに試したコマンドとその出力は何ですか? –

+0

配列を取得しますか: '[...]'または上記の出力? – andlrc

答えて

0

Dev_ReleaseRollout_Lane-3Dev_ReleaseRollout_Lane-latestPayments_Dev_Lane-267のみ必要アレイ。 -rは生の出力です。このオプションで

--raw-output/-r:

、フィルタの結果が、それはむしろ、引用符でJSON文字列としてフォーマットされているよりも、標準出力に直接書き込まれる文字列である場合。これは、jqフィルターを非JSONベースのシステムと話す場合に便利です。

以下上述したようにcURLの出力が動作します実際にある場合:

jq -rRs '"[\(.)]" | fromjson[].name' file.json 

私は入力の周りに配列をラップするためのより良い方法があると思いますが、

-Rが生の入力であります-sはスラップです。 \(...)string interpolationです。

--slurp/-s:
代わり入力各JSONオブジェクトのフィルタを実行する、大きなアレイへの全入力ストリームを読み取り、一度だけのフィルタを実行します。

関連する問題