执行Groovy脚本以在Nifi中转换日期

时间:2019-08-02 10:02:24

标签: groovy apache-nifi

我正在尝试使用Nifi转换JSON日期。它们以以下格式导入:

import groovy.json.JsonSlurper
import groovy.json.JsonBuilder

def ff = session.get()
if(!ff)return
ff = session.write(ff, {rawIn, rawOut->

    // transform streams into reader and writer
    rawIn.withReader("UTF-8"){reader->
        rawOut.withWriter("UTF-8"){writer->

            //parse reader into Map
            def json = new JsonSlurper().parse(reader)

            // set my variable and define what format it is in
            json.date = new Date(json.date as Long).format('HH:mm yyyy-MM-dd')

            // Reformat it
            json.date = DateFormat.parse("yyyy-MM-dd HH:mm", json.date)

            //write changed object to writer
            new JsonBuilder(json).writeTo(writer)
        }
    }
} as StreamCallback)
session.transfer(ff, REL_SUCCESS)

传入的流文件具有以下主体:

[{"date":"09:00 2019-05-29","data":460.0,"name":"login"},{"date":"10:00 2019-05-29","data":548.0,"name":"login"},{"date":"11:00 2019-05-14","data":0.0,"name":"login"},{"date":"00:00 2019-06-15","data":0.0,"name":"login"}]

我想要这个输出:

[{"date":"2019-05-29 09:00","data":460.0,"name":"login"},{"date":"2019-05-29 10:00","data":548.0,"name":"login"},{"date":"2019-05-14 11:00","data":0.0,"name":"login"},{"date":"2019-06-15 00:00","data":0.0,"name":"login"}]

我得到的错误是: enter image description here

任何人都可以帮助我了解我要去哪里了吗?

1 个答案:

答案 0 :(得分:1)

输入是有关对象的列表。传入的dateString-不是Long。

因此第一个错误是使用json.date,因为它暗示json*.date (给出所有date的列表)。

接下来将日期转换为Long,创建一个新的Date,然后将其格式化为 错误的方法。

因此,要更改所有date的格式,需要执行以下操作:

json.each{
    it.date = Date.parse('HH:mm yyyy-MM-dd', it.date).format('yyyy-MM-dd HH:mm')
}