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

如何使用JQ实现两个JSON文件内数组的笛卡尔积合并?

两个JSON数组按笛卡尔积合并的JQ实现方法

报错原因

你遇到的报错是因为*运算符不支持直接对两个数组做运算,同时你之前的写法没有正确读取两个文件的内容分别处理,jq默认会逐个处理输入的文件,无法直接在单次处理逻辑中同时拿到两个文件的数组内容。

正确实现命令

如果两个数组的元素没有重复字段,直接使用+合并即可:

jq -n 'input as $file1 | input as $file2 | [ $file1[] as $item1 | $file2[] as $item2 | $item1 + $item2 ]' file1.json file2.json

如果两个数组的元素存在相同字段,想要用第二个数组的字段值覆盖第一个的,可以把+替换为*:

jq -n 'input as $file1 | input as $file2 | [ $file1[] as $item1 | $file2[] as $item2 | $item1 * $item2 ]' file1.json file2.json

命令逻辑说明

  • -n参数:禁用jq默认读取输入内容到.的行为,方便自主控制输入的读取逻辑
  • input as $file1:读取第一个输入文件file1.json的内容,存储到变量$file1
  • input as $file2:读取第二个输入文件file2.json的内容,存储到变量$file2
  • 双重遍历逻辑:$file1[] as $item1遍历第一个数组的所有元素,$file2[] as $item2遍历第二个数组的所有元素,两者组合得到完整的笛卡尔积配对
  • 对象合并:$item1 + $item2会合并两个对象的所有键值对,相同字段默认保留前者的取值
  • 外层的[]:把所有合并后的对象放到同一个数组中,匹配要求的输出格式

执行上述命令后即可得到你预期的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:12:01