首页 > 解决方案 > jq编辑JSON不改变值

问题描述

我有一个要操作的 json 文件;但我似乎无法让数据随心所欲地改变。

如果我执行 1; 返回为“true”,因为文件夹已暂停。

1: jq '.folders[] | select(.label=='\"$folder\"') | .paused' "$f"

如果我执行 2; 选择单个记录,并将“真”替换为“假”。

2: jq '.folders[] | select(.label=='\"$folder\"') .paused = false' "$f"

如果我执行 3; 返回整个文件,但不进行任何更改。

3: jq 'if (.folders[] | .label == '\"$folder\"') then .paused = false else . end' "$f"

我希望整个文件与所做的更改一起返回,以便我可以将其发回以更新我要更改的配置。

我在这里做错了什么?

标签: jsonbashjqeditin-place

解决方案


您需要在标签选择上使用 select ,否则上下文会发生变化,您无法返回整个对象。

(.folders[] | select (.label == '\"$folder\"')).paused = false

此外,将变量值作为变量传播到 jq 中更简洁,而不是处理或引用自己的极端情况:

jq --arg folder "$folder" '(.folders[] | select (.label == $folder)).paused = false' "$f"

推荐阅读