从 linux 中的 json 文件中删除特定数据
Remove specific data from json file in linux
我有一个 json 文件,其中包含一组具有重复字段的数据。我需要删除包含字段特定数据的条目。
Json 文件:
[
{
"targets": [
"172.17.1.199"
],
"labels": {
"__meta_netbox_pop": "st-1742",
"__snmp_module__": "arista_sw"
}
},
{
"targets": [
"172.17.1.51"
],
"labels": {
"__meta_netbox_pop": "st-1754",
"__snmp_module__": "arista_sw"
}
}
]
json 文件继续,但这是整个 json 文件的示例。
鉴于 target's
IP 的数据,我需要删除 targets
的条目及其 labels
。
输入:
172.17.1.51
预期输出:
[
{
"targets": [
"172.17.1.199"
],
"labels": {
"__meta_netbox_pop": "st-1742",
"__snmp_module__": "arista_sw"
}
}
]
如果我正确理解了问题,这应该可以解决问题:
target
参数是要删除的IP地址,而file_path
是json文件的路径
编辑:还有,不要忘记import json
,否则它不会工作
def remove_obj(target, file_path):
with open(file_path, "r") as data_file:
data = json.load(data_file)
for obj in data:
if target in obj["targets"]:
data.remove(obj)
with open(file_path, "w") as data_file:
json.dump(data, data_file, indent=4)
使用jq
:
$ jq --arg ip 172.17.1.51 'map(select(.targets | contains([$ip]) | not ))' input.json
[
{
"targets": [
"172.17.1.199"
],
"labels": {
"__meta_netbox_pop": "st-1742",
"__snmp_module__": "arista_sw"
}
}
]
我有一个 json 文件,其中包含一组具有重复字段的数据。我需要删除包含字段特定数据的条目。
Json 文件:
[
{
"targets": [
"172.17.1.199"
],
"labels": {
"__meta_netbox_pop": "st-1742",
"__snmp_module__": "arista_sw"
}
},
{
"targets": [
"172.17.1.51"
],
"labels": {
"__meta_netbox_pop": "st-1754",
"__snmp_module__": "arista_sw"
}
}
]
json 文件继续,但这是整个 json 文件的示例。
鉴于 target's
IP 的数据,我需要删除 targets
的条目及其 labels
。
输入:
172.17.1.51
预期输出:
[
{
"targets": [
"172.17.1.199"
],
"labels": {
"__meta_netbox_pop": "st-1742",
"__snmp_module__": "arista_sw"
}
}
]
如果我正确理解了问题,这应该可以解决问题:
target
参数是要删除的IP地址,而file_path
是json文件的路径
编辑:还有,不要忘记import json
,否则它不会工作
def remove_obj(target, file_path):
with open(file_path, "r") as data_file:
data = json.load(data_file)
for obj in data:
if target in obj["targets"]:
data.remove(obj)
with open(file_path, "w") as data_file:
json.dump(data, data_file, indent=4)
使用jq
:
$ jq --arg ip 172.17.1.51 'map(select(.targets | contains([$ip]) | not ))' input.json
[
{
"targets": [
"172.17.1.199"
],
"labels": {
"__meta_netbox_pop": "st-1742",
"__snmp_module__": "arista_sw"
}
}
]