我有一个要处理的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"
我希望整个文件返回所做的更改,因此我可以将其发布回以更新我尝试更改的配置。
我在这里做错了什么?
您需要在标签选择上使用select,否则上下文会更改,并且您无法返回到整个对象。
(.folders[] | select (.label == '\"$folder\"')).paused = false
而且,将变量值作为变量传播到jq中,而不是处理或引用自己的极端情况是更清洁的方法:
jq --arg folder "$folder" '(.folders[] | select (.label == $folder)).paused = false' "$f"