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

如何用jq将types.json作为'typelist'元素合并到config.json根层级?

问题:将types.json内容作为新元素添加到config.json根层级

我是jq新手,需要实现:把types.json的内容作为名为typelist的新元素,添加到config.json的根层级,生成out.json。

我尝试执行的命令:

jq --jsonargs types types.json '. * .["typelist"].$types' config.json > out.json

执行后出现错误:

jq: error: types/0 is not defined at , line 1:


相关文件内容

config.json

{
    "origconfig1": {
        "id1Config1": null,
        "id2Config1": true,
        "id3Config1": false,
        "id24Config1": false
    },
    "origconfig2": {
        "id1Config2": "",
        "id2Config2": "3a4b68",
        "id3Config2": "f2af35",
        "id4Config2": true,
        "id5Config2": "d.m.Y",
        "id6Config2": true
    }
}

types.json

[
    {
        "code": "CODE_TYPE1",
        "languageCode": "EN",
        "type": "TYPE1"
    },
    {
        "code": "CODE_TYPE2",
        "languageCode": "EN",
        "type": "TYPE2"
    },
    {
        "code": "CODE_TYPE3",
        "languageCode": "EN",
        "type": "TYPE3"
    }
]

预期输出out.json

{
    "origconfig1": {
        "id1Config1": null,
        "id24Config1": false,
        "id2Config1": true,
        "id3Config1": false
    },
    "origconfig2": {
        "id1Config2": "",
        "id2Config2": "3a4b68",
        "id3Config2": "f2af35",
        "id4Config2": true,
        "id5Config2": "d.m.Y",
        "id6Config2": true
    },
    "typelist": [
        {
            "code": "CODE_TYPE1",
            "languageCode": "EN",
            "type": "TYPE1"
        },
        {
            "code": "CODE_TYPE2",
            "languageCode": "EN",
            "type": "TYPE2"
        },
        {
            "code": "CODE_TYPE3",
            "languageCode": "EN",
            "type": "TYPE3"
        }
    ]
}

正确实现方法

之前的命令错误在于--jsonargs用法不当,且jq表达式逻辑混乱。以下两种方法可以实现需求:

方法1:使用--argfile(jq 1.5+适用)

jq --argfile types types.json '. + {typelist: $types}' config.json > out.json
  • --argfile 会把types.json的JSON内容读取到变量$types中
  • . + {typelist: $types} 将config.json的对象和包含typelist键的新对象合并,完成新元素添加

方法2:使用输入重定向(通用方法)

jq -n 'input + {typelist: input}' config.json types.json > out.json
  • -n 参数让jq不自动读取输入,而是通过input命令手动读取文件
  • 第一个input读取config.json内容,第二个input读取types.json内容,合并后输出包含typelist的新对象

错误原因说明

你用的--jsonargs是传递JSON参数的工具,但用法不正确;同时表达式. * .["typelist"].$types既错误引用变量,又误用乘法合并对象,导致jq解析报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:05:43