假设有一个json文件:
{
"columns": {
"id": {
"required": true,
"type": "integer"
},
"name": {
"required": false,
"type": "string"
},
"description": {
"type": "string"
}
}
}
我想使用jq
来获取每一列的值“ required”字段。如果字段“ required”不存在,则应返回默认值false
。
特别是:
jq '.columns.id | getOrDefault("required", false)' # true
jq '.columns.name | getOrDefault("required", false)' # false
jq '.columns.description | getOrDefault("required", false)' # false
如何在jq
中实现此神奇的getOrDefault()函数?
答案 0 :(得分:2)
如果字段“ required”不存在,则应返回默认值false。
要从字面上实现该功能,您可以使用has/1
而不是//
,例如:
.columns.id
| if has("required") then .required else false end
如果已知.required字段从未指定为null
,则这两种技术(如上所述使用has
和// false
)是等效的。
您几乎肯定不会定义这样的功能,但是由于您提出以下要求:
def getOrDefault($key; $default):
if has($key) then .[$key] else $default end;
(注意:jq中的参数分隔符为;
。)
答案 1 :(得分:1)
$ jq '.columns.description | .required // false' file
false