jq は他のキーの値に対応する値を探します。

jq は他のキーの値に対応する値を探します。

私はカール|

{
  "ssh_keys": [
    {
      "id": 30482248,
      "fingerprint": "21:57:08:d8:41:0f:89:57:0b:96:95:64:ff:59:50:69",
      "public_key": "ssh-rsa AAAA [email protected]",
      "name": "User's key"
    },
    {
      "id": 30450573,
      "fingerprint": "27:0c:2e:34:63:00:13:9d:5c:26:44:15:f0:cf:15:13",
      "public_key": "ssh-rsa AAAA-VirtualBox",
      "name": "test1"
    },
    {
      "id": 30485316,
      "fingerprint": "28:63:11:6b:a0:c7:ae:e1:e7:98:0b:01:96:c2:f4:87",
      "public_key": "ssh-rsa AAAA lessons",
      "name": "rbm-mykey"
    }
  ],
  "links": {
    "pages": {
      "last": "https://api.digitalocean.com/v2/account/keys?page=3",
      "next": "https://api.digitalocean.com/v2/account/keys?page=2"
    }
  },
   "meta": {
     "total": 59
  }
}

「name」キーの「User's key」値を使用して「public_key」を返したいので、結果は次のようになります。

"ssh-rsa AAAA [email protected]"

私は次のコマンドを試しました。

curl -X GET -H "Authorization: Bearer " "https://api.digitalocean.com/v2/account/keys?page=1" | jq '.[] | .[] | .name' 

しかし、「name」キーの値だけを受け取りました。

答え1

jq配列要素が次の配列から項目を選択した場合public_key(文字列はコマンドラインから取得した変数の値として提供されます):ssh_keysnameUser's keyUser's keyjq$queryname

jq -r --arg queryname "User's key" '.ssh_keys[] | select(.name == $queryname).public_key'

これ-rにより、値がデコードされて印刷されます。それ以外の場合は、-rJSONでエンコードされた(および引用符付き)値が得られます。

curl上記のコマンドを使用してJSON出力をストリーミングできます。与えられた文書を入力として使用すると、1行が生成されます。

ssh-rsa AAAA [email protected]

関連情報