我正在尝试使用 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"
我建议使用一个简单的工具json超过jq。它不是那么快,但使用起来更直观,并且具有更好的功能。
json 使用参数处理这个-g
问题:
-g,--组
将相邻对象分组为对象数组,或将相邻数组连接为单个数组。
$ cat sample.json | json -ag access_key
1234
答案2
一个解决方案是使用empty
cat sample.json | jq -r -e ".access_key // empty "