在JQ中从列表中提取多个子元素时,如何避免创建叉积? [英] How do I avoid creating a cross product when extracting multiple sub-elements from a list in JQ?

查看:25
本文介绍了在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_urlimg_angle具有相互引用的值-您肯定不能,这里仅用于说明目的。

我尝试了几种方法,这些方法一直给我一个叉积,但实际上并不改变输出,例如{ sku: .SKU, desc: .Description } + { img_url: .Images[].FullUrl } + { img_angle: .Images[].Angle }

我还尝试了改编this recipe bookthis cheat sheet中的食谱。我一直无法获得在运行时不呕吐的任何有用的东西。

推荐答案

这是您要找的吗:

.Products[] | {sku: .SKU, desc: .Description} + (
  .Images[] | {img_url: .FullUrl, img_angle: .Angle}
)

Fiddle

这篇关于在JQ中从列表中提取多个子元素时,如何避免创建叉积?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆