【发布时间】:2021-08-03 00:24:11
【问题描述】:
我正在生成一个如下所示的 JSON 文件 (input.json):
[
{
"name": "MINIMUM_NOTICE_PERIOD",
"value": "3"
},
{
"name": "SERVER_TIMEZONE",
"value": "Europe/London"
}
]
我有一个现有的 JSON 文件 (task.json),它是一个如下所示的 AWS ECS 任务定义:
{
"family": "test-container",
"networkMode": "awsvpc",
"containerDefinitions": [
{
"cpu": 0,
"image": "test-image",
"name": "test-container",
"environment": [
{
"name": "CRON",
"value": "no"
},
{
"name": "LOG_CHANNEL",
"value": "stack"
}
]
}
],
"requiresCompatibilities": [
"FARGATE"
],
"cpu": "512",
"memory": "1024"
}
我正在尝试将 JSON 文件 (input.json) 中的额外值插入到任务 def json 文件 (task.json) 中
我正在使用命令:
jq --argjson envVars "$(<input.json)" '.containerDefinitions[0].environment += [$envVars]' task.json > new-task.json
一切都很顺利,直到结果是:
{
"family": "test-container",
"networkMode": "awsvpc",
"containerDefinitions": [
{
"cpu": 0,
"image": "test-image",
"name": "test-container",
"environment": [
{
"name": "CRON",
"value": "no"
},
{
"name": "LOG_CHANNEL",
"value": "stack"
},
[
{
"name": "MINIMUM_NOTICE_PE",
"value": "3"
},
{
"name": "SERVER_TIMEZONE",
"value": "Europe/London"
}
]
]
},
"requiresCompatibilities": [
"FARGATE"
],
"cpu": "512",
"memory": "1024"
}
它将文件的全部内容,包括打开和关闭 [] 插入现有数组,我的目标是更像这样:
{
"family": "test-container",
"networkMode": "awsvpc",
"containerDefinitions": [
{
"cpu": 0,
"image": "test-image",
"name": "test-container",
"environment": [
{
"name": "CRON",
"value": "no"
},
{
"name": "LOG_CHANNEL",
"value": "stack"
},
{
"name": "MINIMUM_NOTICE_PE",
"value": "3"
},
{
"name": "SERVER_TIMEZONE",
"value": "Europe/London"
}
]
},
"requiresCompatibilities": [
"FARGATE"
],
"cpu": "512",
"memory": "1024"
}
我也试过命令:
jq '.containerDefinitions[0].environment += $inputs' task.json --slurpfile inputs input.json
运行它会得到相同的 JSON 输出。
我曾尝试从 inpur.json 文件中删除括号,但这样做会导致两个 jq 命令出现以下错误:
jq: invalid JSON text passed to --argjson
jq: Bad JSON in --slurpfile inputs input.json
有人知道如何获得我正在寻找的输出吗?由于我一直在努力弄清楚最后一部分,因此需要任何帮助。
【问题讨论】:
标签: arrays json merge jq insert-update