Json 如何在jq中生成笛卡尔积?

Json 如何在jq中生成笛卡尔积?,json,shell,jq,Json,Shell,Jq,假设我有意见 [ { "a":1, "b":2 }, { "a":3, "b":4 } ] 我试着 echo '[{"a": 1, "b": 2}, {"a": 3, "b": 4}]' | jq '[{x: .[].a, y: .[].b}]' 我想得到 [ { "x":1, "b":2, "language":"en" }, {

假设我有意见

[  
   {  
      "a":1,
      "b":2
   },
   {  
      "a":3,
      "b":4
   }
]
我试着

echo '[{"a": 1, "b": 2}, {"a": 3, "b": 4}]' | jq '[{x: .[].a, y: .[].b}]'
我想得到

[  
   {  
      "x":1,
      "b":2,
      "language":"en"
   },
   {  
      "x":1,
      "b":2,
      "language":"fr"
   }...
]
这意味着我需要为数组中的所有项目输出两个项目,一个带有添加的
“lanuage”:“en”
键值对,另一个带有
“lanuage”:“ru”


编辑。以防不清楚。我需要一个对象输入数组
is
与另一个数组
xs
的catesian乘积,这将给我成对的
(I,x)
。对于每一对我想要输出的对象,其所有(键,值)对都是
I
加上一些值为
x
的键(
language
),通常,任何生成多个值的表达式与另一个生成多个值的表达式组合,都将创建笛卡尔乘积

i、 e

生成字符串
“13”
“23”
“14”
,以及
“24”

在给定一个值数组的情况下,也可以执行相同的操作<代码>[]将获取数组并为每个项目生成结果。结合这些概念,你可以做这样的事情:

$ jq --argjson langs '["en","fr"]' '[(.[]|{x:.a,b}) + {language:$langs[]}]' input.json
但这可以进一步简化为:

$ jq --argjson langs '["en","fr"]' '[.[]|{x:.a,b,language:$langs[]}]' input.json


这一切正常,但输出无效的json,我需要一个数组。如何做到这一点?这是一个json对象流。如果您需要将流作为数组,只需添加方括号将其放入数组中即可。我已经尝试过这样的
echo'[{“a”:1,“b”:2},{“a”:3,“b”:4}]'|jq--argjson langs'[“en”,“fr”]'.[{x:.a,y:.b,langs:[]。这就产生了数组流。
$ jq --argjson langs '["en","fr"]' '[.[]|{x:.a,b,language:$langs[]}]' input.json
$ jq --argjson langs '["en","fr"]' 'map({x:.a,b,language:$langs[]})' input.json