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

如何在不使用数组索引的情况下复制JSON对象属性(jq实现)

不依赖数组顺序的jq字段赋值方法

输入数据

{
"zoo": [
   { "x": { "guesst": "" } },
   { "y": { "guesst": "zebra" } }
  ]
}

目标输出

{
"zoo": [
   { "x": { "guesst": "zebra" } },
   { "y": { "guesst": "zebra" } }
  ]
}

你当前使用的命令依赖数组索引的固定顺序:

jq '.zoo[0].x.guesst = .zoo[1].y.guesst'

如果无法确定数组中对象的顺序,可以用以下两种方式实现需求:

通用方案(适配任意键名/顺序)

先提取出guesst字段的非空有效值,再遍历数组给所有guesst字段赋值:

jq '($validValue = .zoo[] | .[] | .guesst | select(length > 0)) | .zoo[] | .[] | .guesst = $validValue'

逻辑说明:

  • 从zoo数组的所有对象中,筛选出guesst不为空的值存入变量$validValue
  • 遍历zoo数组的每个对象,将所有guesst字段统一设置为这个有效值

精准匹配方案(针对已知键名)

如果明确需要用y的guesst值覆盖x的guesst,可以直接根据键名定位,无需依赖数组位置:

jq '($targetVal = .zoo[] | .y.guesst) | .zoo[] | .x.guesst = $targetVal'

逻辑说明:

  • 从zoo数组中找到包含y键的对象,取出其guesst值存入$targetVal
  • 遍历zoo数组找到包含x键的对象,将它的guesst字段设置为$targetVal

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:00:02