【问题标题】:Jolt Spec - Flatten out Nested Array and copy root valuesJolt Spec - 展平嵌套数组并复制根值
【发布时间】:2023-03-09 08:58:01
【问题描述】:

我需要展平一个嵌套数组,并将值从外部节点复制到展平数组中的每个元素。

productSizes 嵌套数组需要展平为 Data 数组,然后需要将 product 节点中的字段添加到 Data 数组中,同时保持关系。

输入 JSON:

[
  {
    "product": {
      "productSizes": [
        {
          "productCode": "AA0714-001",
          "masterSizeCode": "1.5Y"
        },
        {
          "productCode": "AA0714-001",
          "masterSizeCode": "11C"
        }
      ],
      "genderAgeCode": "20",
      "divisionCode": "20"
    }
  },
  {
    "product": {
      "productSizes": [
        {
          "productCode": "BB0204-100",
          "masterSizeCode": "XL"
        },
        {
          "productCode": "BB0204-100",
          "masterSizeCode": "S"
        }
      ],
      "genderAgeCode": "01",
      "divisionCode": "30"
    }
  }
]

预期输出 JSON:

{
  "Data" : [ {
    "productCode" : "AA0714-001",
    "masterSizeCode" : "1.5Y",
    "GC" : "20",
    "DC" : "20"
  }, {
    "productCode" : "AA0714-001",
    "masterSizeCode" : "11C",
    "GC" : "20",
    "DC" : "20"
  }, {
    "productCode" : "BB0204-100",
    "masterSizeCode" : "XL",
    "GC" : "01",
    "DC" : "30"
  }, {
    "productCode" : "BB0204-100",
    "masterSizeCode" : "S",
    "GC" : "01",
    "DC" : "30"
  } ]
}

我的规格:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "product": {
          "productSizes": {
            "*": "Data[]"
          },
          "genderAgeCode": "Data[&2].GC",
          "divisionCode": "Data[&2].DC"
        }
      }
    }
  }
]

我的输出

{
  "Data" : [ {
    "productCode" : "AA0714-001",
    "masterSizeCode" : "1.5Y",
    "GC" : "20",
    "DC" : "20"
  }, {
    "productCode" : "AA0714-001",
    "masterSizeCode" : "11C",
    "GC" : "01",
    "DC" : "30"
  }, {
    "productCode" : "BB0204-100",
    "masterSizeCode" : "XL"
  }, {
    "productCode" : "BB0204-100",
    "masterSizeCode" : "S"
  } ]
}

不太确定在这种情况下如何建立分组。

【问题讨论】:

    标签: json transform apache-nifi jolt


    【解决方案1】:

    您需要遍历所有属性的 productSizes 数组的索引,以便重复该数组所具有的尽可能多的元素。所以,使用这个规范

    [
      {
        "operation": "shift",
        "spec": {
          "*": {
            "product": {
              "productSizes": {
                "*": {
                  "@": "&[&4]",
                  "@(2,genderAgeCode)": "&[&4].GC",
                  "@(2,divisionCode)": "&[&4].DC"
                }
              }
            }
          }
        }
      },
      {
        "operation": "shift",
        "spec": {
          "*": {
            "*": "Data"
          }
        }
      }
    ]
    

    其中[&4] 表示向后遍历四次左大括号({),以便到达并抓取最外层的索引(规范部分中的第一个 * 字符)和& 用于分隔索引(01)的值,以便在 &[&4] 替换中区分它们

    【讨论】:

    • 非常感谢,成功了!!我对颠簸完全陌生。您能否解释一下"&1[&4]""&[&4].GC" 的实际作用。我发现这些 & 和 # 通配符真的很混乱。
    • 不客气@JobinThomas。顺便说一句,我已经编辑了答案,用&1[&4] 中的& 替换了多余的&1
    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    相关资源
    最近更新 更多