使用 JOLT 需要使用 If Then Else 条件转换 JSON 对象

With JOLT need to Transform JSON object with If Then Else Condition

下面是我的输入Json

[
  {
    "correlationId": "12345",
    "payloadFormat": "Money",
    "payload": {
      "DE35": "123654ABC54678",
      "DE45": "898454PQR54678"
    }
  }
]

我需要以这种方式对这个 json 进行 Trnsaform 如果 DE35 具有子字符串 6-9 的值,则在转换 Json 中取 DE35 值,如果 DE35 没有值则取 DE45转换中的值 Json.

所以如果 DE35 可用则输出将是

[ {
  "COR_ID" : "12345",
  "payloadFormat" : "Money",
  "EXT_SERV_CD":"ABC"
} ]

如果 DE35 不可用则输出应该是

[ {
  "COR_ID" : "12345",
  "payloadFormat" : "Money",
  "EXT_SERV_CD":"PQR"
} ]

我正在使用 Below JOLT 规范进行转换,但它不起作用。

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "@": "&",
        "payload": {
          "DE|DE35": "&2.payload.TMPDE35"
        }
      }
    }
  }, {
    "operation": "modify-default-beta",
    "spec": {
      "*": {
        "payload": {
          "DE35Val": "=substring(@(1,TMPDE35), 6, 9)"
        }
      }
    }
  },

  {
    "operation": "shift",
    "spec": {
      "*": {
        "@": "&",
        "payload": {
          "DE|DE45": "&2.payload.TMPDE45"
        }
      }
    }
  }, {
    "operation": "modify-default-beta",
    "spec": {
      "*": {
        "payload": {
          "DE45Val": "=substring(@(1,TMPDE45), 6, 9)"
        }
      }
    }
  },

  {
    "operation": "shift",
    "spec": {
      "*": {
        "correlationId": "[&1].COR_ID",
        "payloadFormat": "[&1].payloadFormat",
        "payload": {
          "DE35Val": {
            "ABC": {
              "DE35Val": "[#3].payload.EXT_SERV_CD"
            },
            "false": {
              "DE45Val": "[#3].payload.EXT_SERV_CD"
            }
          }
        }
      }
    }
  }
]

请指出我哪里出错了。

此规范应该适合您

[
  {
    "operation": "modify-default-beta",
    "spec": {
      "*": {
        "TmpDE35": "=substring(@(1,payload.DE35), 6, 9)",
        "TmpDE45": "=substring(@(1,payload.DE45), 6, 9)"
      }
    }
  },
  {
    "operation": "modify-default-beta",
    "spec": {
      "*": {
        "Tmp35_45": "=concat(@(1,TmpDE35), @(1,TmpDE45))"
      }
    }
  },
  {
    "operation": "modify-default-beta",
    "spec": {
      "*": {
        "EXT_SERV_CD": "=substring(@(1,Tmp35_45), 0, 3)"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": "[&1].&",
        "Tmp*": null,
        "payload": null
      }
    }
  }
]

解决思路:

  1. DE35DE45字段的子串移动到TmpDE35TmpDE45
  2. 连接TmpDE35TMPDE45并存储在Tmp35_45中。如果 TmpE35 为空,则前 3 个字符将来自 TmpDE45
  3. 获取子串Tmp35_45
  4. 清理,转移