You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用jq工具更新JSON中可变路径对应的内容?

问题分析与解决方法

错误原因

原命令存在三个核心问题:

  1. 遍历范围错误:.[]会遍历所有顶级JSON元素,其中storageSummary是数值类型,尝试访问它的.value属性会触发解析错误,这就是你看到Invalid numeric literal报错的直接原因。
  2. 键名大小写不匹配:原JSON中字段是satelliteName(驼峰式),但命令里写成了小写的satellitename,无法匹配目标字段。
  3. 逻辑冗余错误:不需要遍历所有元素再筛选,直接通过动态键访问目标对象即可。

正确实现方法

单次更新命令

直接通过.[$ds]访问动态指定的顶级键,然后修改其下的satelliteName字段:

DS_SRC_FILE="test.json"
DS_OBJECT=$(jq -c '' "${DS_SRC_FILE}")

ds="audit1"
new_name="toto"

# 执行更新并重新赋值给变量
DS_OBJECT=$(jq --arg ds "$ds" --arg name "$new_name" '.[$ds].satelliteName = $name' <<< "$DS_OBJECT")

# 验证结果(可选)
echo "$DS_OBJECT" | jq .

# 将最终结果写入新文件
echo "$DS_OBJECT" > updated_test.json

多次更新示例

如果需要多次修改不同的键,只需重复执行更新步骤即可:

# 第一次更新audit1
ds="audit1"
new_name="toto"
DS_OBJECT=$(jq --arg ds "$ds" --arg name "$new_name" '.[$ds].satelliteName = $name' <<< "$DS_OBJECT")

# 第二次更新audit2
ds="audit2"
new_name="new_saltlake"
DS_OBJECT=$(jq --arg ds "$ds" --arg name "$new_name" '.[$ds].satelliteName = $name' <<< "$DS_OBJECT")

# 写入文件
echo "$DS_OBJECT" > final_updated.json

关键说明

  • 使用.[$ds]实现动态键访问,精准定位到目标对象,避免遍历无关元素。
  • 注意JSON字段名的大小写严格匹配,原数据中是satelliteName,必须完全一致。
  • 每次更新后将结果重新赋值给DS_OBJECT,实现多次修改后统一写入文件。

内容的提问来源于stack exchange,提问作者Burps

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 16:52:11