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