Nifi执行脚本处理器常规替换儿子

时间:2019-06-10 16:31:41

标签: json datetime apache-nifi

我正在尝试动态更改json文件的日期格式,然后再发送它。

import groovy.json.*

def ff = session.get()
if(!ff) return
ff = session.write(ff, {rawIn, rawOut->
    //parse flowfile content to maps & arrays
    def json = new JsonSlurper().parse(rawIn, "UTF-8")
    //change json 
    json.revision.version =  (json.revision.version as Long) + 1
    //write to output changed content
    rawOut.withWriter("UTF-8"){ it.write( JsonOutput.toJson(json) )}
} as StreamCallback)
session.transfer(ff, REL_SUCCESS)

这是我通过整理不同的教程获得的最接近的结果。这是我的JSON,这只是数据和日期的一个值,但是会有很多:

{
  "test" : [ {
    "data" : "119050300",
    "date" : "00:00 2019-06-03"
  } ]
}

如何使用上面的脚本将日期转换为这样的日期时间格式:

{
  "test" : [ {
    "data" : "119050300",
    "date" : "2019-06-03'T'10:00"
  } ]
}

真的很感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

nifi-groovy代码还可以,您只需更改//change json部分

def json = new groovy.json.JsonSlurper().parseText('''{
  "test" : [ 
  {
    "data" : "119050300",
    "date" : "00:00 2019-06-03"
  },
  {
    "data" : "119050301",
    "date" : "01:23 2019-06-03"
  }
  ]
}''')
//change json
json.test.each{e->
    //use regexp to change date format because you just need to swap two parts 
    e.date = e.date.replaceAll(/(\d{2}:\d{2}) (\d{4}-\d{2}-\d{2})/,'$2\'T\'$1')
}
//change json end