json jq del:从列表中删除元素

bvk5enib  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(138)

我想删除JSON列表中具有值为false的“enabled”键的条目。
下面的jq cmd确实选择了假条目,但现在我想删除这些条目并保留结构的其余部分。

jq '.app.sig[] | select(.enabled==false)'  app-test.json

字符串
JSON输入示例

{
  "app" : {
       "id" : "11111111",
       "name" : "test",
       "general" : {
           "allow" : "sdasdass",
       },
       "settings" : {
           "max" : "8192",
       },
       "sig" : [
           {
               "enabled" : true,
               "Staging" : false,
               "sId" : "200101556"
           },
           {
               "enabled" : false,
               "Staging" : false,
               "sId" : "200012071"
           },
           {
               "enabled" : true,
               "Staging" : false,
               "sId" : "200012002"
           },
       ],
       "version" : "v1",
   }
}


感谢任何帮助。
谢啦,谢啦

xam8gpfp

xam8gpfp1#

有了一个有效的JSON输入,就可以直接使用delselect

del(.app.sig[] | select(.enabled | not))

字符串
Demo
或者,使用map使用您想要保留的内容重置数组:

.app.sig |= map(select(.enabled))


Demo
在这两种情况下,都可以直接使用select中的布尔值(可能取反)。输出量:

{
  "app": {
    "id": "11111111",
    "name": "test",
    "general": {
      "allow": "sdasdass"
    },
    "settings": {
      "max": "8192"
    },
    "sig": [
      {
        "enabled": true,
        "Staging": false,
        "sId": "200101556"
      },
      {
        "enabled": true,
        "Staging": false,
        "sId": "200012002"
      }
    ],
    "version": "v1"
  }
}

相关问题