![如何使用 shell 编辑 JSON 文件?](https://linux22.com/image/191100/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20shell%20%E7%BC%96%E8%BE%91%20JSON%20%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我正在构建一个使用 JSON 文件的 shell 脚本。
{
"property1": true,
"list": [
{
"id": 1,
"name": "APP1"
},
{
"id": 2,
"name": "APP2"
}
],
"property2": false
}
name
我需要使用 shell 脚本从 中读取list
并从列表中删除其父对象。基本上我需要APP1
从using shell 中删除具有名称的对象list
。编辑 JSON 结构不是一个选项。
答案1
答案2
我会使用 Python 编写脚本,它内置了 JSON 读/写函数。
给定一个文件 ,myfile.json
其中包含 OP 中的 JSON 对象:
#!/usr/bin/env python # Use the Python interpreter
from json import load, dump # Import the JSON file read and write functions
with open("myfile.json", "r") as file_object: # Open the JSON file for reading
json_data = load(file_object) # Load the data into a dictionary
new_list = [item for item in json_data["list"] if item["name"] != "APP1"] # Make a new list without the item that should be removed
json_data["list"] = new_list # Update the dictionary with the new list
with open("myfile.json", "w") as file_object: # Open the JSON file for writing and truncate it
dump(json_data, file_object) # Write the file back to disk
答案3
答案4
正如詹姆斯·科尔所示 以及亚伦·F,但使用jq
而不是zq
或Python。该操作将.list
数组设置为原始数组中不等于.name
的元素APP1
。
$ jq '.list |= map(select(.name != "APP1"))' file
{
"property1": true,
"list": [
{
"id": 2,
"name": "APP2"
}
],
"property2": false
}