在jq中获取或默认功能?

时间:2019-06-12 05:23:47

标签: json jq

假设有一个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 个答案:

答案 0 :(得分:2)

  

如果字段“ required”不存在,则应返回默认值false。

要从字面上实现该功能,您可以使用has/1而不是//,例如:

   .columns.id
   | if has("required") then .required else false end

如果已知.required字段从未指定为null,则这两种技术(如上所述使用has// false)是等效的。

getOrDefault / 2

您几乎肯定不会定义这样的功能,但是由于您提出以下要求:

def getOrDefault($key; $default):
  if has($key) then .[$key] else $default end;

(注意:jq中的参数分隔符为;。)

答案 1 :(得分:1)

使用alternative operator (//)

$ jq '.columns.description | .required // false' file
false