arrays - jq有条件地在json数组中添加元素并打印整个修改后的文件
问题描述
我有一个具有以下格式的 json 文件。如果 .children[].type=="environmentApprovalTask" 和 .children[].role.name== "GCM approvalr" 和输出,我想在 propDefs[] 中添加元素 {"test" : "2"}到新文件。我想要包含修改后内容的整个文件。.children[] 数组可能并不总是有 3 个元素。
{
"edges": [
{
"to": "de32e562319310b7b4fe3736e22009",
"from": "99d5f0b278f08721adba7741b782d8",
"type": "SUCCESS",
"value": ""
},
{
"to": "06916609ad7fd4127815be3f075c81",
"from": "de32e562319310b7b4fe3736e22009",
"type": "SUCCESS",
"value": ""
},
{
"to": "99d5f0b278f08721adba7741b782d8",
"type": "ALWAYS",
"value": ""
}
],
"offsets": [
{
"name": "99d5f0b278f08721adba7741b782d8",
"x": -91,
"y": 100,
"h": 70,
"w": 290
},
{
"name": "06916609ad7fd4127815be3f075c81",
"x": -5,
"y": 420,
"h": 80,
"w": 120
},
{
"name": "de32e562319310b7b4fe3736e22009",
"x": 69,
"y": 240,
"h": 70,
"w": 240
}
],
"layoutMode": "manual",
"type": "graph",
"id": "d5d9c4c4-0c5f-4642-872c-ac892039eaa4",
"name": "79e8b952-dd59-4cfd-9c0c-e6c08a81d4ca",
"children": [
{
"type": "finish",
"id": "833e959c-6825-413d-afc4-7b74c0a87c3e",
"name": "06916609ad7fd4127815be3f075c81",
"children": []
},
{
"id": "e976041d-af9d-48cf-b838-735bb5efd483",
"type": "envApprovalTask",
"children": [],
"name": "de32e562319310b7b4fe3736e22009",
"roleRestrictionData": {
"contextType": "ENVIRONMENT",
"roleRestrictions": [
{
"roleId": "087175fb-5d38-42d1-b65a-2b6a6958bc21"
}
]
},
"propDefs": [{"test": "1"}],
"templateName": "ApprovalCreated",
"commentRequired": false,
"commentPrompt": "",
"role": {
"id": "087175fb-5d38-42d1-b65a-2b6a6958bc21",
"name": "Approver",
"isDeletable": true
}
},
{
"id": "513fbc6a-3c4a-4a10-9eb0-7dc893c69413",
"type": "environmentApprovalTask",
"children": [],
"name": "99d5f0b278f08721adba7741b782d8",
"roleRestrictionData": {
"contextType": "ENVIRONMENT",
"roleRestrictions": [
{
"roleId": "116b8cd5-e7e4-403d-9599-35fe25d3cba2"
}
]
},
"propDefs": [],
"templateName": "ApprovalCreated",
"commentRequired": false,
"commentPrompt": "",
"role": {
"id": "116b8cd5-e7e4-403d-9599-35fe25d3cba2",
"name": "Manager Approver",
"isDeletable": true
}
}
]
}
我对代码的最后一次尝试
cat file.json |jq '.|.children[]| select(.type=="envApprovalTask")|select(.role.name=="Approver") |.propDefs[.profDefs|length] |= .+ {"test" : "2"}'
这只会产生修改后的元素,不会产生整个文件作为输出。请帮助我如何获得所需的输出。
解决方案
TIL 关于jq
. 这实际上有效:
(.children[] | select(.type=="envApprovalTask" and .role.name=="Approver") | .propDefs) |= .+[{"test":"2"}]
与您的版本的唯一显着区别是作业的括号左侧。
推荐阅读
- javascript - 尝试将页脚中的每个按钮设置为白色
- python - 为什么 Jupyter notebook 在 matplotlib xlabel() 之后会打印文本?
- python-3.x - 如何导入无法从 pip/conda 存储库安装的 Python 包(Pytorch-neat)?
- javascript - 按降序和升序对数组进行排序
- c# - 将页面加载/加载事件绑定到 ICommand
- c - 如何使用 yacc 解析 if /else 语句
- c# - 为什么来自 Grid 的 PNG 文件完全是黑色的?
- excel - VBA - If 语句引用不同工作表中单元格中的特定文本
- html - 为我的表单提交添加限制和限制
- python - 我的 for 循环工作有问题