null - JQ:如果字段为空或不存在,如何删除?
问题描述
如果字段为空或不存在,我需要删除它。json看起来像:
{
"response": {
"somefield1": 0,
"somefield2": 0,
"somefield3": 0.0,
"somefield4": [{
"somefield5": "abc",
"somefield6": "123",
"TheField": ["\u0000\"{\"id\":\"123,SomeFields\":{\"SomeField\":{some data}}}\"\u0000"]
}]
}
}
江青
{
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,那么如果它的值为 null,则删除该键,否则保持 $o 不变,你可以这样写:
$o | if .[$k] == null then del(.[$k]) else . end
或者如果键足够简单(基本上是带有前导 alpha 的字母数字,其中“alpha”包括“_”),您可以编写如下表达式:
$o | if .k == null then del(.k) else . end
推荐阅读
- python - Azure Python SDK - 列出 VM 并生成自定义 JSON 响应
- excel - 创建文件夹的数据验证
- r - 修改ggplot2中的美学映射以获得正确的情节图例
- java - 将 list.map 返回类型从列表更改为 JsonArray
- reactjs - 使用
上传文件。我将如何将其设置为声明以供后续提交到列表? - python - 从python中的父类实例化
- android - 如何使用 AppBarConfiguration 设置 NavigationView?
- sql - 如何根据另一个表值编写查询
- amazon-web-services - 将 npm db-migrate 与 Elastic Beanstalk 一起使用
- java - Hibernate - 重写旧版 createCriteria