json 如何使用jq删除一个键中包含了某个substing的元素?

plupiseo  于 2023-01-27  发布在  其他
关注(0)|答案(1)|浏览(104)

我有以下JSON:

{
  "Category": [
    {
      "SomeKey_1": {
        "Property1": 1,
        "Property2": false
      }
    },
    {
      "SomeKey_2": {
        "Property1": 2,
        "Property2": true
      }
    },
    {
      "OtherKey_1": {
        "Property1": 3,
        "Property2": false
      }
    },
    {
      "OtherKey_2": {
        "Property1": 4,
        "Property2": false
      }
    }
  ]
}

并且我想从Category []数组中删除键以"Other"开头或包含"Other"的元素,因此我想得到这样的结果:

{
  "Category": [
    {
      "SomeKey_1": {
        "Property1": 1,
        "Property2": false
      }
    },
    {
      "SomeKey_2": {
        "Property1": 2,
        "Property2": true
      }
    }
  ]
}

我尝试使用选择命令,但在那里我能够根据值而不是键进行选择。

5us2dqdw

5us2dqdw1#

如果数组中的所有对象只包含一个属性:

.Category |= map(select(keys_unsorted[0] | contains("Other") | not))

如果要删除任何属性键以“其他”开头的对象:

.Category |= map(select(any(keys_unsorted[]; contains("Other")) | not))

最后,如果您只想删除那些只有“其他”属性的对象:

.Category |= map(select(all(keys_unsorted[]; contains("Other")) | not))

也可以使用del过滤器:

del(.Category[] | select(keys_unsorted[0] | contains("Other")))
del(.Category[] | select(any(keys_unsorted[]; contains("Other"))))
del(.Category[] | select(all(keys_unsorted[]; contains("Other"))))

相关问题