我需要更新/编辑json格式的文件。
因此,我想删除名称具有特定值的整个对象。
在这里,值是类型 “ name”:“ value1_1:value1_2”
在这里,值1_1是我要查找的特定值。
如果有任何对象与value1_1匹配,我希望删除整个对象。
是否可以使用ansible完成此操作,或者是否需要任何自定义更改?
例如:在这里我要删除第一个对象,该对象的值是value1_1。
{
"objects": [
{
"name": "value1_1:value1_2"
},
{
"name": "value2_1:value2_2"
},
],
}
答案 0 :(得分:1)
使用jq进行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