我有以下 JSON 文件位于/tmp/target.json
:
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
...
}
}
我想添加一个新的键值对,如下所示:
{
"compileOnSave": false,
"compilerOptions": {
"skipLibCheck": true,
"baseUrl": "./",
...
}
}
我使用以下命令但它不起作用:
jq --argjson addobj '{"skipLibCheck": "true"}' '
.compilerOptions{} |= $addobj
' /tmp/target.json
我给了我这个错误:
jq: error: syntax error, unexpected '{', expecting $end (Unix shell quoting issues?) at <top-level>, line 2:
.compilerOptions{} |= $addobj
jq: 1 compile error
我做错了什么?我怎样才能让它按预期工作?
像这样:
另一个答案中介绍了添加键及其值的最简单方法。该答案将键添加到对象中键列表的末尾
compilerOptions
。通常,键的顺序无关紧要,如果您需要以特定方式排序的东西,您将使用数组。但是,我注意到您(无论出于何种原因)希望在现有密钥之前首先添加密钥baseUrl
。我们可以在该位置添加键,而不是将新键添加到现有对象,而是将现有对象的键添加到新键的末尾。所以给定现有的 JSON 文档,
...我们可能想使用
鉴于我们上面的示例文档,这将生成
Thing是一个对象,其中包含使用和/或在命令行上
$ARGS.named
定义的键值对。在上面的示例中,这将是. 请注意,该功能是在 . 1.5 版本之后引入的。--arg
--argjson
{"skipLibCheck":true}
$ARGS
jq
使用较旧的 1.5 版本
jq
,您可以使用如果您希望值是字符串而不是特殊的布尔值,请使用
--arg
instead of 。--argjson
true
true
下面给出了在末尾添加密钥的另一种方法(到另一个答案中提到的内容),它遵循与上述命令相同的模式。请注意,我也切换到使用此处作为字符串
--arg
插入,只是为了展示它的外观。true
...这会给你
使用较旧的 1.5 版本
jq
,您可以使用