仅打印值并排除 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"

我建议使用一个简单的工具json超过jq。它不是那么快,但使用起来更直观,并且具有更好的功能。

json 使用参数处理这个-g问题:

-g,--组

将相邻对象分组为对象数组,或将相邻数组连接为单个数组。

$ cat sample.json | json -ag access_key
1234

答案2

一个解决方案是使用empty

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

相关内容