假设有一个json文件:
{
"columns": {
"id": {
"required": true,
"type": "integer"
},
"name": {
"required": false,
"type": "string"
},
"description": {
"type": "string"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想用来jq获取每列的值“必填”字段。如果“必填”字段不存在,则应返回默认值false。
具体来说:
jq '.columns.id | getOrDefault("required", false)' # true
jq '.columns.name | getOrDefault("required", false)' # false
jq '.columns.description | getOrDefault("required", false)' # false
Run Code Online (Sandbox Code Playgroud)
如何在 中实现这个神奇的 getOrDefault() 函数jq?
ogu*_*ail 20
在这种特殊情况下,您可以使用替代运算符 ( //)。
$ jq '.columns.description | .required // false' file
false
Run Code Online (Sandbox Code Playgroud)
有关故障安全、普遍适用的方法,请参阅peak 的回答。
pea*_*eak 12
如果“必填”字段不存在,则应返回默认值 false。
要从字面上实现该功能,您将使用has/1而不是//,例如:
.columns.id
| if has("required") then .required else false end
Run Code Online (Sandbox Code Playgroud)
如果已知 .required 字段永远不会被指定为null,那么这两种技术(使用has如上和使用// false)是等效的。
您几乎肯定不会定义这样的函数,但是既然您问:
def getOrDefault($key; $default):
if has($key) then .[$key] else $default end;
Run Code Online (Sandbox Code Playgroud)
(注意:jq 中的参数分隔符是;。)
| 归档时间: |
|
| 查看次数: |
4706 次 |
| 最近记录: |