jq编辑JSON不变值

问题描述 投票:0回答:2

我有一个要处理的json文件;但我似乎无法根据需要更改数据。

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

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

如果我执行2,选择一条记录,然后将“ true”替换为“ false”。

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

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

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

我希望整个文件返回所做的更改,因此我可以将其发布回以更新我尝试更改的配置。

我在这里做错了什么?

json bash jq edit in-place
2个回答
0
投票

您需要在标签选择上使用select,否则上下文会更改,并且您无法返回到整个对象。

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

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

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

0
投票

现在全部工作!

请参阅:Syncthing forum以获取更多信息。

我正在尝试使用cron暂停/恢复计划中的特定文件夹。 API尚不支持此功能,因此我需要通过编辑配置手动进行操作。

感谢所有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.