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 출력을 스트리밍할 수 있습니다. 주어진 문서를 입력으로 사용하면 한 줄이 생성됩니다.

ssh-rsa AAAA [email protected]

관련 정보