问题描述
下面是输入的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"
}
} ]
注意:
- 经过https://jolt-demo.appspot.com 的测试
- 看一下上面的规范中也使用了modify-default-beta操作用法的示例
- 如果帖子标题中
12
中的date(12)
表示transactionDate
的长度,那么您可能是指date(14)
:(4 + 2 + 2 + 2 + 2 + 2,表示:年+月+日+小时+分钟+秒)