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

如何使用jq将数组中每个元素修改为「元素 is 元素」格式?

问题描述

原始JSON数据:

[
    {
        "title": "Title1",
        "reference": [
            "123"
        ]
    },
    {
        "title": "Title2",
        "reference": [
            "234",
            "345"
        ]
    }
]

需要将每个对象的reference数组元素修改为「元素 is 元素」的格式,预期结果:

[
    {
        "title": "Title1",
        "reference": [
            "123 is 123"
        ]
    },
    {
        "title": "Title2",
        "reference": [
            "234 is 234",
            "345 is 345"
        ]
    }
]

尝试以下jq命令时,在reference数组包含多个元素的情况下出错:

jq '.[] | .reference = [("\(.reference[]) is \(.reference[])")]'

错误结果生成了多余的笛卡尔积组合:

{
  "title": "Title1",
  "reference": [
    "123 is 123"
  ]
}
{
  "title": "Title2",
  "reference": [
    "234 is 234",
    "345 is 234",
    "234 is 345",
    "345 is 345"
  ]
}
解决办法

使用以下jq命令即可实现预期效果:

jq '.[] | .reference |= map("\(.) is \(.)")'

如果需要输出完整的数组结构(而非单个对象),可以在外层加上数组包裹:

jq '[.[] | .reference |= map("\(.) is \(.)")]'

原命令出错原因

原命令里的"\(.reference[]) is \(.reference[])"会两次展开reference数组的元素,相当于把数组内的每个元素和所有元素配对组合,自然生成了大量多余条目。

而map()函数会逐个遍历reference数组的元素,对每个元素单独执行字符串拼接操作,确保每个元素只生成对应的「元素 is 元素」字符串,不会出现乱配对的情况。|=运算符则用于直接修改原对象的reference属性,保证结构完整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:10:43