如何在jq中使用if条件验证字段?

huangapple go评论61阅读模式
英文:

How to validate fields with if conditional in jq?

问题

我正在验证一个JSON文件,我需要验证一个字段,如果它为空,就赋予一个默认值,我找不到如何使用条件语句进行验证。

file.json
{  
    "timeout": 100
}
jq -r .timeout file.json

在这里,它正确地打印出该值,我需要验证这个字段是否为空,然后使用jq为其赋予一个默认值。

提前感谢。

英文:

I am validating a json file, I need to validate in a field that if it is null, assign a default value, I can't find how to perform a validation with if conditional

file.json
{  
    "timeout": 100
}
jq -r .timeout fiile.json

here it prints the value correctly, I need to validate if this field is null to assign it a default value with jq

Thanks in advance

答案1

得分: 1

使用更新运算符 |= 来更新所讨论的字段。对于条件,只需与 null 进行比较。

jq '.timeout |= if . == null then 200 else . end'

如果你的输入文件是

{  
  "timeout": 100
}

它将保持不变,因为 .timeout 不是 null。但如果它是

{  
  "timeout": null
}

那么它将被更改为给定的默认值,这里是:

{  
  "timeout": 200
}

请注意,这仅对 null 的内容触发。还有其他方法来测试 false、数字零 0、空字符串 "" 等,甚至是该字段的完全缺失。

英文:

Use the update operator |= to update the field in question. For the conditional just compare to null.

jq '.timeout |= if . == null then 200 else . end'

If your input file is

{  
  "timeout": 100
}

it will stay the same, as .timeout is not null. But if it is

{  
  "timeout": null
}

then it will be changed to the default value given, here:

{  
  "timeout": 200
}

Note that this only triggers for the content of null. There are other means to test for false, the number zero 0, the empty string "", etc., even the complete absence of that field.

答案2

得分: 0

你可以尝试替代运算符 //

英文:

You can try alternative operator //

jq '.timeout //= 200' file.json

huangapple
  • 本文由 发表于 2023年2月10日 03:52:38
  • 转载请务必保留本文链接:https://go.coder-hub.com/75403756.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定