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

如何用jq根据satelliteName匹配更新对应的auditScore值?

解决指定satelliteName对应的auditScore更新问题

问题根源

你之前的命令.[]|select(.satelliteName=="us2.storj.io:7777")报错,是因为.[]会遍历根对象的所有值,其中storageSummary是数字类型,尝试访问它的satelliteName属性必然报错。

解决方案

方案一:通用处理(适合未知audit字段数量的情况)

使用to_entries和from_entries转换结构,筛选目标对象并修改:

to_entries | map(
  if .value.satelliteName == "us2.storj.io:7777" then
    .value.auditScore = 0.9  # 替换成你需要的新值
  else
    .
  end
) | from_entries

命令说明:

  • to_entries:将原对象转换为键值对数组(如[{"key":"storageSummary","value":68624392000000}, ...])
  • map:遍历数组,对匹配satelliteName的对象更新auditScore,其余保持原样
  • from_entries:将处理后的键值对数组转回原对象结构,保留storageSummary不变

方案二:针对性处理(适合已知audit字段名称的情况)

直接逐个检查audit字段,避免遍历非对象值:

. |= (
  .audit1 |= (if .satelliteName == "us2.storj.io:7777" then .auditScore = 0.9 else . end) |
  .audit2 |= (if .satelliteName == "us2.storj.io:7777" then .auditScore = 0.9 else . end) |
  .audit3 |= (if .satelliteName == "us2.storj.io:7777" then .auditScore = 0.9 else . end)
)

验证效果

执行方案一命令后,输出的JSON会更新目标对象的auditScore,其余内容保持不变:

{
  "storageSummary": 68624392000000,
  "audit1": {
    "auditScore": 0.9,
    "suspensionScore": 1,
    "onlineScore": 0.99743587,
    "satelliteName": "us2.storj.io:7777"
  },
  "audit2": {
    "auditScore": 1,
    "suspensionScore": 1,
    "onlineScore": 0.9992917,
    "satelliteName": "saltlake.tardigrade.io:7777"
  },
  "audit3": {
    "auditScore": 1,
    "suspensionScore": 1,
    "onlineScore": 0.99930555,
    "satelliteName": "ap1.storj.io:7777"
  }
}

内容的提问来源于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 11:00:17