假设有一个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()函数?
2条答案
按热度按时间b0zn9rqh1#
在这种特殊情况下,可以使用替代运算符(
//
)。有关故障安全的一般适用方法,请参见peak's answer。
djmepvbi2#
如果字段“required”不存在,则应返回默认值false。
要按字面意义实现该功能,应使用
has/1
而不是//
,例如:如果已知.required字段永远不会被指定为
null
,那么这两种技术(如上所述使用has
和使用// false
)是等效的。获取或默认值/2
你几乎肯定不会定义这样的函数,但既然你问:
(NB:jq中的参数分隔符是
;
。)通用getOrDefault/2