首页 > 解决方案 > 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 删除所有语句,我没有得到任何回应。

标签: nullkeyjqexistsdel

解决方案


如果为空或不存在,如何删除字段?

如果 $o 是一个可能有也可能没有键的对象,比如 $k,那么如果它的值为 null,则删除该键,否则保持 $o 不变,你可以这样写:

$o | if .[$k] == null then del(.[$k]) else . end

或者如果键足够简单(基本上是带有前导 alpha 的字母数字,其中“alpha”包括“_”),您可以编写如下表达式:

$o | if .k == null then del(.k) else . end

推荐阅读