【问题标题】:Change a value in a json file using zsh使用 zsh 更改 json 文件中的值
【发布时间】:2021-12-17 09:46:37
【问题描述】:

我有一个 JSON 文件,我正在尝试使用脚本更改其中的特定值。

"foo-bar": "baz",

在本例中设置为 baz,但实际上我不知道这个值是什么。

我想在更大的脚本中更改 foo-bar 的值。

"foo-bar": "qux",

我试过了

$var='qux'
jq --arg passvar ${var} '{"foo-bar":$passvar}' file.json

我在终端得到正确的输出

{
"foo-bar": "qux"
}

但是当我使用 vim 检查实际文件内容时,我得到了

"foo-bar": "baz",

jq 不想保存新的 file.json?或者这是某种形式的预览? 我错过了什么?有没有比jq 更好的方法来更新/设置 json 文件中的值?

*为初始变量添加破折号,现在是 foo-bar 而不是 foo。

【问题讨论】:

标签: javascript json zsh


【解决方案1】:

根据文档:

过滤器的输出被写入标准输出

因此,您需要将输出重定向到您想要的任何文件。

jq --arg passvar ${var} '{"foo":$passvar}' file.json > newfile.json

【讨论】:

  • 感谢您的回复。事实上,如果你想把它传递给同一个文件file.json,你需要把它传递给一个临时文件tmp.json,然后再传回file.json
【解决方案2】:

真正的答案在这里 https://stackoverflow.com/a/42718624/1286903

tmp=$(mktemp)
jq --arg p "$p" '."foo-bar" = $p' file.json > "$tmp" && mv "$tmp" file.json

'."foo-bar" 是您要编辑的密钥。

您需要使用临时文件来执行此操作。另外,当你的 vars 有破折号时,请注意引号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 2021-02-05
    • 2019-02-18
    • 2016-03-01
    • 1970-01-01
    • 2015-06-29
    相关资源
    最近更新 更多