如何解决JQ:如果字段为空或不存在,如何删除字段?
如果字段为空或不存在,我需要删除它。 Json 看起来像:
{
"response": {
"somefield1": 0,"somefield2": 0,"somefield3": 0.0,"somefield4": [{
"somefield5": "abc","somefield6": "123","TheField": ["\u0000\"{\"id\":\"123,SomeFields\":{\"SomeField\":{some data}}}\"\u0000"]
}]
}
}
JQ
{
SomeField: "%s",SomeField1: "%s",SomeField2: "a",SomeField3: "b",SomeField4: {
a: "%s",b: "%s"
},SomeField5: "%s",SomeField6: .response?.somefield4[]?.TheField[]?,} | del(.someField6? | nulls)
因此,如果“TheField”不存在或为空,我需要删除 SomeField6。现在,而不是删除当前字段 JQ 删除所有语句,我没有得到任何响应。
解决方法
如果字段为空或不存在,如何删除字段?
如果 $o 是一个可能有也可能没有键的对象,比如 $k,然后删除键,如果它的值为空,否则保留 $o 原样,你可以写:
$o | if .[$k] == null then del(.[$k]) else . end
或者如果键足够简单(基本上是带有前导字母的字母数字,其中“alpha”包括“_”),您可以按照以下方式编写表达式:
$o | if .k == null then del(.k) else . end
,
您可以简单地有条件地创建字段,而不是创建该字段然后删除它。
将键 $k 有条件地添加到对象 $o 的一个简单而健壮的(jq 的 w.r.t. 版本)方法是使用模板:
$o + (if CONDITION then {($k): $value} else null end)
其中 CONDITION 和 $value 每个计算为一个值。
所以在你的情况下,你可以这样写:
((try first(.response.somefield4[].TheField[]) catch null) // null) as $value
. + (if $value then {SomeField6: $value} else null end)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。