删除与特定值匹配的json中的整个对象

时间:2018-07-31 18:16:48

标签: json ansible

我需要更新/编辑json格式的文件。

因此,我想删除名称具有特定值的整个对象。

在这里,值是类型 “ name”:“ value1_1:value1_2”

在这里,值1_1是我要查找的特定值。

如果有任何对象与value1_1匹配,我希望删除整个对象。

是否可以使用ansible完成此操作,或者是否需要任何自定义更改?

例如:在这里我要删除第一个对象,该对象的值是value1_1。

{
  "objects": [
    {
     "name": "value1_1:value1_2"
    },

    {
     "name": "value2_1:value2_2"
    },
  ],
}

1 个答案:

答案 0 :(得分:1)

使用进行JSON编辑任务很简单,所以让我先 指向有关在Ansible中使用jq的网页:

https://medium.com/@george.shuklin/ansible-and-jq-9d8e50ec3379

在此之前,这里是用于过滤掉的jq过滤器 .name以“ value1_1:”开头的对象:

.objects |= map(select(.name|startswith("value1_1:")|not))

请注意,一般而言,jq期望其输入为有效JSON。 您可以通过在控制台上运行jq empty input.json来检查是否是这种情况 提示。如果您的输入不是足够有效的JSON,请参阅jq FAQ中的建议: https://github.com/stedolan/jq/wiki/FAQ#processing-not-quite-valid-json

如果示例代码段很典型,那么您可以例如通过运行以下命令来纠正伪JSON:

hjson -j snippet.txt