값만 인쇄하고 null은 제외

값만 인쇄하고 null은 제외

jq를 사용하여 json 출력을 인쇄하려고 하는데 null이 표시됩니다. 인쇄하지 않고 access_key 및 Secret_key만 인쇄하는 방법은 무엇입니까 null?

$ cat sample.json | jq '.'

{
  "access_key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
{
  "secret_key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}

$ cat sample.json | jq -e ".access_key"  
xxxxxxxxxxxxxxxxxxxxxxxxx
null

Secret_key에서도 같은 일이 발생합니다.

"원시 출력"을 사용하면 오류가 발생합니다.

$ cat sample.json | jq -r ".access_key" | jq --raw-output 'select(type == "string")'
parse error: Invalid numeric literal at line 2, column 0

나는 또한 이것을 시도했습니다 :

$ cat sample.json | jq -re ".access_key" | jq 'select(.go != null) | .geo' > geo-only.json
parse error: Invalid numeric literal at line 2, column 0

답변1

입력한 json이 잘못되었습니다. 당신은 그것을 사용할 수 있습니다https://jsonlint.com가서 확인해 보세요.

다음과 같이 변경하여 작동하게 할 수 있습니다.

[{
    "access_key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}, {
    "secret_key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}]

또는 jq해결 방법이 있습니다.

cat sample.json | jq "..|objects|select(.access_key) | .access_key"

간단한 도구를 사용하는 것이 좋습니다JSONJq 이상. 속도가 빠르지는 않지만 사용하기가 더 직관적이고 기능도 더 좋습니다.

json은 매개변수를 사용하여 이 문제를 처리합니다 -g.

-g, --그룹

인접한 객체를 객체 배열로 그룹화하거나 인접한 배열을 단일 배열로 연결합니다.

$ cat sample.json | json -ag access_key
1234

답변2

한 가지 해결책은 다음을 사용하는 것입니다.empty

cat sample.json | jq -r -e ".access_key // empty "

관련 정보