json - 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"
我希望整个文件与所做的更改一起返回,以便我可以将其发回以更新我要更改的配置。
我在这里做错了什么?
解决方案
您需要在标签选择上使用 select ,否则上下文会发生变化,您无法返回整个对象。
(.folders[] | select (.label == '\"$folder\"')).paused = false
此外,将变量值作为变量传播到 jq 中更简洁,而不是处理或引用自己的极端情况:
jq --arg folder "$folder" '(.folders[] | select (.label == $folder)).paused = false' "$f"
推荐阅读
- javascript - ASP.net 找不到 javascript 函数
- azure - 使用带有 Flask 的 Azure Functions,我如何实现 2 个 Azure 函数 webhook 以同时从控制台运行
- node.js - 无法 Docker 将基于 nuxt 的快速服务器端口转发到主机
- java - 为什么我的计时器没有每秒打印一次?
- spring-boot - 使用 Sprint Boot 和 GraphQL 进行集成测试时出现 Jackson 错误
- sql - SQL_ 仅在它们是连续的情况下为每个用户提取失败/恢复事件
- reactjs - 如何在反应中为函数内的状态变量设置值
- macos - 如何在 Mac 中将 Flutter 永久添加到 Path
- assembly - 没有跳过 Asm 注释
- javascript - 如何在 amCharts 中调用 am4core 之前加载库?