我目前有一个用 jq 操作的 json 文件。在大多数情况下,我能够按照我想要的方式显示它。但是,在显示空字段的值时遇到问题。我正在使用//替代运算符,但它没有返回所需的输出。使用 jq 处理空字符串的正确方法是什么?
电流输出:
RELEASE INSTALLED LATEST DEPRECATED
test-app 1.0.0 2.0.0 false
test-app2 3.0.0 true
Run Code Online (Sandbox Code Playgroud)
期望的输出:
RELEASE INSTALLED LATEST DEPRECATED
test-app 1.0.0 2.0.0 false
test-app2 3.0.0 - true
Run Code Online (Sandbox Code Playgroud)
杰q:
cat test1.json | jq -r 'map({release, installed: .Installed.version, latest: (.Latest.version // "-"), deprecated}) | ( .[0] | keys_unsorted | map(ascii_upcase)), (.[] | [.[]]) | @tsv' | column -t
Run Code Online (Sandbox Code Playgroud)
杰森:
[
{
"release": "test-app",
"Installed": {
"version": "1.0.0",
"appVersion": ""
},
"Latest": {
"version": "2.0.0",
"appVersion": ""
},
"outdated": true,
"deprecated": false
},
{
"release": "test-app2",
"Installed": {
"version": "3.0.0",
"appVersion": ""
},
"Latest": {
"version": "",
"appVersion": ""
},
"outdated": false,
"deprecated": true
}
]
Run Code Online (Sandbox Code Playgroud)
如果空字符串""是您想要视为的唯一情况null,您可以使用替代运算符强制它,然后根据需要进行替换。
.Latest.version // "" | select(. != "") // "-"
# or using if-then-else
.Latest.version // "" | if . == "" then "-" else . end
# or if you're using the latest dev version, else is optional
.Latest.version // "" | if . == "" then "-" end
Run Code Online (Sandbox Code Playgroud)