需要在YYYY-MM-DD-hh:mm:ss中用JOLT sepc转换date12

问题描述

下面是输入的json

[
  {
    "correlationId": "12345","payloadFormat": "Money","payload": {      
      "transactionDate": "2018010118060"      
      "name": "Dallas"      
    }
  },{
    "correlationId": "67895","payloadFormat": "cash","payload": {      
      "transactionDate": "2018010128040"      
      "name": "Texas"
      
    }
  }
]

下面是预期的输出

[
  {
    "correlationId": "12345","payload": {      
      "transactionDate": "date should be in yyyy-MM-dd HH:mm:ss"      
      "name": "Dallas"      
    }
  },"payload": {      
      "transactionDate": "date should be in yyyy-MM-dd HH:mm:ss"      
      "name": "Texas"
      
    }
  }
]

解决方法

提供的输入中的transactionDates字符串似乎格式错误/不一致(长度不同,缺少秒数,请参见答案末尾的三分音符)。

输入略有修改:

[
  {
    "correlationId": "12345","payloadFormat": "Money","payload": {
      "transactionDate": "201801011806012","name": "Dallas"
    }
  },{
    "correlationId": "67895","payloadFormat": "cash","payload": {
      "transactionDate": "20180101084014","name": "Texas"
    }
  }
]

规范

[
  {
    "operation": "modify-default-beta","spec": {
      "*": {
        "year": "=substring(@(1,payload.transactionDate),4)","month": "=substring(@(1,4,6)","day": "=substring(@(1,6,8)","hour": "=substring(@(1,8,10)","minute": "=substring(@(1,10,12)","second": "=substring(@(1,12,14)"
      }
    }
  },{
    "operation": "modify-overwrite-beta","spec": {
      "*": {
        "payload": {
          "transactionDate": "=concat(@(2,year),'-',@(2,month),day),' ',hour),':',minute),second))"
        }
      }
    }
  },{
    "operation": "remove","spec": {
      "*": {
        "year": "","month": "","day": "","hour": "","minute": "","second": ""
      }
    }
   }
]

我们的输出如下:

[ {
  "correlationId" : "12345","payloadFormat" : "Money","payload" : {
    "transactionDate" : "2018-01-01 18:06:01","name" : "Dallas"
  }
},{
  "correlationId" : "67895","payloadFormat" : "cash","payload" : {
    "transactionDate" : "2018-01-01 08:40:14","name" : "Texas"
  }
} ]

注意:

  1. 经过https://jolt-demo.appspot.com
  2. 的测试
  3. 看一下上面的规范中也使用了modify-default-beta操作用法的示例
  4. 如果帖子标题中12中的date(12)表示transactionDate的长度,那么您可能是指date(14):(4 + 2 + 2 + 2 + 2 + 2,表示:年+月+日+小时+分钟+秒)