首页 > 解决方案 > JOLT 变换 - 模式匹配

问题描述

我正在尝试通过匹配“||*”之类的模式来转换输入字段,其中单词由“|”分隔。但是,我无法让它工作。如果我替换'|' 通过':',规范有效。'|'是否有特殊含义,如何将其用作正则表达式的一部分?

Input:
{
  "items": [
    {
      "itemId": "1234500AA",
      "additionalData": "12345|20001|3000"
    }
  ]
}

Spec:
Spec:
[
  {
    "operation": "shift",
    "spec": {
      "items": {
        "*": {
          "itemId": "ID",
          "additionalData": {
            "*|*|*": {
              "$(0,1)": ["cartMenuItems[&3].baseProductId", "cartMenuItems[&3].mdmId"],
              "$(0,2)": "cartMenuItems[&3].code",
              "$(0,3)": "cartMenuItems[&3].sku"
            }
          }
        }
      }
    }
  }
]

Ouput Expected:
{
  "ID" : "1234500AA",
  "cartMenuItems" : [ {
    "baseProductId" : "12345",
    "mdmId" : "12345",
    "code" : "20001",
    "sku" : "3000"
  } ]
}

但是,我收到如下错误:JOLT Chainr 在索引:0 处遇到构造 Transform className:com.bazaarvoice.jolt.Shiftr 的异常。

标签: jolt

解决方案


颠簸似乎不喜欢 | (因为您需要逃避它们),您可以替换 |:

[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "items": {
        "*": {
          "additionalDataTemp": "=split('\\|',@(1,additionalData))",
          "additionalData": "=concat(@(1,additionalDataTemp[0]),'_',@(1,additionalDataTemp[1]),'_',@(1,additionalDataTemp[2]))"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "items": {
        "*": {
          "itemId": "ID",
          "additionalData": {
            "*_*_*": {
              "$(0,1)": ["cartMenuItems[&3].baseProductId", "cartMenuItems[&3].mdmId"],
              "$(0,2)": "cartMenuItems[&3].code",
              "$(0,3)": "cartMenuItems[&3].sku"
            }
          }
        }
      }
    }
  }
]

或者另一种方法是:

[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "items": {
        "*": {
          "additionalData": "=split('\\|', @(1,additionalData))",
          "baseProductId": "@(1,additionalData[0])",
          "mdmId": "@(1,additionalData[0])",
          "code": "@(1,additionalData[1])",
          "sku": "@(1,additionalData[2])"
        }
      }
    }
    },
  {
    "operation": "shift",
    "spec": {
      "items": {
        "*": {
          "itemId": "ID",
          "*": "cartMenuItems.&"
        }
      }
    }
    },
  {
    "operation": "remove",
    "spec": {
      "cartMenuItems": {
        "additionalData": ""
      }
    }
    }

]

推荐阅读