NiFi,Jolt的操作“子字符串”不起作用

时间:2020-09-23 14:38:35

标签: json apache-nifi jolt

我有一些日期时间标记,我假装将其分组在紧接其之前的四分之一小时内。

例如,我有以下数据:

[
  {
    "id": "123",
    "dateTime": "2020-07-08T08:49:50+02:00",
    "value": "1"
  },
  {
    "id": "123",
    "dateTime": "2020-07-08T13:14:57+02:00",
    "value": "1"
  },
  {
    "id": "123",
    "dateTime": "2020-07-08T13:15:15+02:00",
    "value": "1"
  },
  {
    "id": "123",
    "dateTime": "2020-07-08T13:36:39+02:00",
    "value": "1"
  }
]

经过一些JOLT转换后,我得到了以下数据:

[ {
  "id" : "123",
  "dateHour" : "2020-07-08T08",
  "minutes" : "45",
  "value" : "1"
}, {
  "id" : "123",
  "dateHour" : "2020-07-08T13",
  "minutes" : "0",
  "value" : "1"
}, {
  "id" : "123",
  "dateHour" : "2020-07-08T13",
  "minutes" : "15",
  "value" : "1"
}, {
  "id" : "123",
  "dateHour" : "2020-07-08T13",
  "minutes" : "30",
  "value" : "1"
} ]

在这里,我有问题。借助网页http://jolt-demo.appspot.com/,我成功使用以下JOLT代码将“ 0”转换为“ 00”

[
{ "operation": "modify-overwrite-beta", 
  "spec": { 
    "*": { 
      "minutes": "=concat('0',@(0))" 
    } 
  } 
},
{ "operation": "modify-overwrite-beta", 
  "spec": { 
    "*": { 
      "minutes": "=substring(@(1,minutes),1,3)" 
    }
  }
}
]

预期的输出(并通过网页获得):

[ {
  "id" : "123",
  "dateHour" : "2020-07-08T08",
  "minutes" : "45",
  "value" : "1"
}, {
  "id" : "123",
  "dateHour" : "2020-07-08T13",
  "minutes" : "00",
  "value" : "1"
}, {
  "id" : "123",
  "dateHour" : "2020-07-08T13",
  "minutes" : "15",
  "value" : "1"
}, {
  "id" : "123",
  "dateHour" : "2020-07-08T13",
  "minutes" : "30",
  "value" : "1"
} ]

NiFi中的实际输出:

[ {
  "id" : "123",
  "dateHour" : "2020-07-08T08",
  "minutes" : "045",
  "value" : "1"
}, {
  "id" : "123",
  "dateHour" : "2020-07-08T13",
  "minutes" : "00",
  "value" : "1"
}, {
  "id" : "123",
  "dateHour" : "2020-07-08T13",
  "minutes" : "015",
  "value" : "1"
}, {
  "id" : "123",
  "dateHour" : "2020-07-08T13",
  "minutes" : "030",
  "value" : "1"
} ]

由于某些原因,“ = substring()”函数无法在NiFi中正常运行。有人有什么技巧可以接受字符串的后两项吗?

1 个答案:

答案 0 :(得分:0)

您可以转换为数字并将其左移。看看是否有帮助

message.guild.channels.create('ticket ' + message.member.displayName, { parent: '744477882730020965' });

输入:

[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": {
        "minutes": ["=toInteger", 0]
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": {
        "minutes": "=toString"
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": {
        "minutes": "=leftPad(@(1,minutes),2,'0')"
      }
    }
  }
]

输出:

[
  {
    "id": "123",
    "dateHour": "2020-07-08T08",
    "minutes": "045",
    "value": "1"
  },
  {
    "id": "123",
    "dateHour": "2020-07-08T13",
    "minutes": "00",
    "value": "1"
  },
  {
    "id": "123",
    "dateHour": "2020-07-08T13",
    "minutes": "015",
    "value": "1"
  },
  {
    "id": "123",
    "dateHour": "2020-07-08T13",
    "minutes": "030",
    "value": "1"
  }
]
相关问题