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 "