本文介绍了在JQ中从列表中提取多个子元素时,如何避免创建叉积?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在从供应商那里获取产品信息。它有无数的字段,但我已经将其缩减为仅相关的字段。我预计解决方案与map()
有关,但我一直无法理解它。
当我尝试从子词典中获取多个字段时,它会产生叉积。在本例中,我预期返回2行,但我得到4行。
Fiddle
预期输出:
{
"sku": "1234",
"desc": "Pink Ring",
"img_url": "https://provider.com/rings/1234_A",
"img_angle": "ViewA"
}
{
"sku": "1234",
"desc": "Pink Ring",
"img_url": "https://provider.com/rings/1234_B",
"img_angle": "ViewB"
}
起始数据:
{
"Products": [
{
"SKU": "1234",
"Description": "Pink Ring",
"RingSize": 7,
"Images": [
{
"FullUrl": "https://provider.com/rings/1234_A",
"SortOrder": 1,
"Angle": "ViewA"
},
{
"FullUrl": "https://provider.com/rings/1234_B",
"SortOrder": 2,
"Angle": "ViewB"
}
]
}
]
}
然后我将其通过此筛选器:
.Products[] | { sku: .SKU, desc: .Description, img_url: .Images[].FullUrl, img_angle: .Images[].Angle }
这为我提供了以下数据:
{
"sku": "1234",
"desc": "Pink Ring",
"img_url": "https://provider.com/rings/1234_A",
"img_angle": "ViewA"
}
{
"sku": "1234",
"desc": "Pink Ring",
"img_url": "https://provider.com/rings/1234_A",
"img_angle": "ViewB"
}
{
"sku": "1234",
"desc": "Pink Ring",
"img_url": "https://provider.com/rings/1234_B",
"img_angle": "ViewA"
}
{
"sku": "1234",
"desc": "Pink Ring",
"img_url": "https://provider.com/rings/1234_B",
"img_angle": "ViewB"
}
这正是我所希望的。您可以看到URL_A和角度_A没有与URL_B和角度_B交叉相乘。
{
"sku": "1234",
"desc": "Pink Ring",
"img_url": "https://provider.com/rings/1234_A",
"img_angle": "ViewA"
}
{
"sku": "1234",
"desc": "Pink Ring",
"img_url": "https://provider.com/rings/1234_B",
"img_angle": "ViewB"
}
请不要假设您可以信任img_url
和img_angle
具有相互引用的值-您肯定不能,这里仅用于说明目的。
我尝试了几种方法,这些方法一直给我一个叉积,但实际上并不改变输出,例如{ sku: .SKU, desc: .Description } + { img_url: .Images[].FullUrl } + { img_angle: .Images[].Angle }
。
我还尝试了改编this recipe book和this cheat sheet中的食谱。我一直无法获得在运行时不呕吐的任何有用的东西。
推荐答案
这是您要找的吗:
.Products[] | {sku: .SKU, desc: .Description} + (
.Images[] | {img_url: .FullUrl, img_angle: .Angle}
)
这篇关于在JQ中从列表中提取多个子元素时,如何避免创建叉积?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!