当前位置: 首页 > 知识库问答 >
问题:

使用Apache NiFi进行带有数据操作的JSON转换

罗学真
2023-03-14

我想对下面的示例JSON进行一些基本的转换,我想将时间戳标记的值更改为日期格式,并想使用NiFi将值为< code>current_timestamp的新标记< code>created_ts添加到我预期的JSON输出中。

示例JSON:

{"name": "SAMPLE_NAME","timeStamp": "1477307252000","value": "-0.06279052","quality": "1090"}

预期的JSON:

{"name": "SAMPLE_NAME","timeStamp": "2016-11-08 14:46:13.674","value": "-0.06279052","quality": "1090","created_ts":"2016-11-08 14:46:13.674"}

您能否帮助了解Apache NiFi/HDF中要遵循的详细步骤。

共有1个答案

卫寒
2023-03-14

未实现数据转换。

查看官方文档:

https://github.com/bazaarvoice/jolt#stock-transforms

股票转换

股票转换是:

shift       : copy data from the input tree and put it the output tree
default     : apply default values to the tree
remove      : remove data from the tree
sort        : sort the Map key values alphabetically ( for debugging and human readability )
cardinality : "fix" the cardinality of input data.  Eg, the "urls" element is usually a List, 
                    but if there is only one, then it is a String

目前,所有的股票转换只是影响数据的“结构”。

要进行数据操作,您需要编写Java代码。

如果您编写Java“数据操作”代码来实现Transform接口,那么您可以将代码插入到转换链中。

因此,为了完成您的任务,我看到了两个主要变体:

第1版:

使用以下处理器的顺序:

评估JsonPath-

EvaluateJsonPath 中为每个字段定义属性,并使用 $.name、$.timeStamp、...

更新属性中转换时间戳的格式并定义新属性:

attribute  |   value/expression
-----------------------------------------------------------
timeStamp  |   timeStamp:format('yyyy-MM-dd HH:mm:ss.SSS')
created_ts |   now():format('yyyy-MM-dd HH:mm:ss.SSS')

在<code>AttributesToJSON</code>中定义<code>要作为json对象存储到文件内容中的属性列表

V2:将执行脚本处理器与以下代码一起使用:

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)
            //change/set values
            json.timeStamp = new Date(json.timeStamp as Long).format('yyyy-MM-dd HH:mm:ss.SSS')
            json.created_ts = new Date().format('yyyy-MM-dd HH:mm:ss.SSS')
            //write changed object to writer
            new JsonBuilder(json).writeTo(writer)
        }
    }
} as StreamCallback)
session.transfer(ff, REL_SUCCESS)

 类似资料:
  • SQLAlchemy 1.4 / 2.0 Tutorial 此页是 SQLAlchemy 1.4/2.0教程 . 上一页: 使用数据 |下一步: |next| 使用ORM进行数据操作 上一节 使用数据 仍然从核心的角度关注SQL表达式语言,以便在主要的SQL语句结构中提供连续性。本节将构建 Session 以及它如何与这些结构相互作用。 先决条件部分 -本教程以ORM为重点的部分建立在本文档前面两

  • 我正在尝试使用JOLT(使用NiFi JoltTransformJson处理器)将JSON转换为不同的格式。对于单个JSON记录,正在使用的JOLT在JOLT应用程序演示中运行良好,而如果我使用多个JSON记录执行,那么我在JOLT应用程序演示中没有得到预期的输出。有人能告诉我在JOLT规范中需要做哪些额外的更改来处理多个JSON记录吗? 示例输入json JOLT使用: 预期输出JSON:

  • 问题内容: 我读了一些不错的文章,介绍如何通过Android连接到远程MySQL数据库。在这里和这里 找到了一些非常有趣的链接。 因此,获取数据的常用方法似乎是使用某种Web服务(接口,在本例中为php脚本),该服务将查询数据库并以JSON(或XML)格式呈现结果。然后可以使用android JSON_Object实现解析此输出。到目前为止,一切都很好。 从数据库接收数据并将其显示在android

  • 本文向大家介绍Python使用SQLite和Excel操作进行数据分析,包括了Python使用SQLite和Excel操作进行数据分析的使用技巧和注意事项,需要的朋友参考一下 昨日,女票拿了一个Excel文档,里面有上万条数据要进行分析,刚开始一个字段分析,Excel用的不错,还能搞定,到后来两个字段的分析,还有区间比如年龄段的数据分析,实在是心疼的不行,于是就想给她程序处理之。 当然,我是一直C

  • 主要内容:1、JdbcTemplate概念及使用,2、JdbcTemplate 操作数据库(添加),3、JdbcTemplate 操作数据库(修改和删除),4、JdbcTemplate 操作数据库(查询返回某个值),5、JdbcTemplate 操作数据库(查询返回对象),6、JdbcTemplate 操作数据库(查询返回集合),7、JdbcTemplate 操作数据库(批量操作),8、JdbcTemplate 实现批量修改操作1、JdbcTemplate概念及使用 a)Spring 框架对 J