NiFi非Avro JSON读写器

NiFi非Avro JSON读写器,json,avro,apache-nifi,Json,Avro,Apache Nifi,标准ApacheNIFI读写器似乎只能解析基于Avro模式的JSON输入 Avro模式限制JSON,例如,它不允许以数字开头的有效JSON属性 JoltTransferMJSON处理器可以在这里提供帮助(它不会对输入JSON的外观施加Avro限制),但该处理器似乎不支持批处理流文件。它也不是基于读者和作者(可能正因为如此) 是否有方法读取任意有效的批处理JSON输入,例如多行格式 {"myprop":"myval","12345":"12345",...} {"myprop":"myval2",

标准ApacheNIFI读写器似乎只能解析基于Avro模式的JSON输入

Avro模式限制JSON,例如,它不允许以数字开头的有效JSON属性

JoltTransferMJSON处理器可以在这里提供帮助(它不会对输入JSON的外观施加Avro限制),但该处理器似乎不支持批处理流文件。它也不是基于读者和作者(可能正因为如此)

是否有方法读取任意有效的批处理JSON输入,例如多行格式

{"myprop":"myval","12345":"12345",...}
{"myprop":"myval2","12345":"67890",...}
并将其转换为其他JSON结构,例如由定义的,以及使用转换,而无需编写自己的处理器

更新

我正在使用ApacheNIFI 1.7.1

更新2

不幸的是,@Shu的建议起了作用。我也犯了同样的错误。 将大小写简化为单个
UpdateRecord
处理器,该处理器使用数字属性读取JSON,并使用

myprop : /data/5836c846e4b0f28d05b40202
映射。还是同样的错误:(

它不允许以数字开头的有效JSON属性?

此错误在NiFi-1.5版本中修复,我们可以使用AvroSchemaRegistry定义您的模式并更改

验证字段名

false
然后我们可以使用以数字开头的avro模式字段名

有关更多详细信息,请参阅链接

是否有方法读取任意有效的批处理JSON输入,例如多行格式?

此错误在NiFi-1.7中已修复,如果您不使用此版本的NiFi,则我们可以通过使用创建带有
(逗号分隔符)的json消息数组

流量:

1.SplitText //split the flowfile with 1 line count
2.MergeRecord //merge the flowfiles into one
3.ConvertRecord
有关此特定问题的更多详细信息,请参阅链接(我已经用流程进行了解释)

它不允许以数字开头的有效JSON属性?

此错误在NiFi-1.5版本中修复,我们可以使用AvroSchemaRegistry定义您的模式并更改

验证字段名

false
然后我们可以使用以数字开头的avro模式字段名

有关更多详细信息,请参阅链接

是否有方法读取任意有效的批处理JSON输入,例如多行格式?

此错误在NiFi-1.7中已修复,如果您不使用此版本的NiFi,则我们可以通过使用创建带有
(逗号分隔符)的json消息数组

流量:

1.SplitText //split the flowfile with 1 line count
2.MergeRecord //merge the flowfiles into one
3.ConvertRecord

有关此特定问题的更多详细信息,请参阅链接(我已经用流程进行了解释)。

谢谢,这很有趣。我正在使用NiFi 1.7.1。那么您的意思是我必须使用AvroSchemaRegistry来克服财产名称中的数字问题吗?我以前没有使用注册表(将架构直接放入处理器/控制器字段中。使用数字JSON属性解决问题后,我可以使用UpdateRecord(支持批处理)而不是JoltTransferorMJSON处理器。我的意思是,如果没有AvroschemareRegistry,就不可能更改行为,例如通过设置“验证字段名称”是否为false?因为只要我的Avro架构中的属性名以NiFi 1.7.1中的一个数字开头,我就可以执行无效字符异常。@SergeyShcherbakov,我认为如果不使用AvroSchemaRegistry,我们就不能
验证字段名
,我认为使用UpdateRecord processor更改字段名将是跳过AvroSchemaReg的好方法istry。谢谢!请参阅问题中的更新。不幸的是,使用AvroSchemaRegistry没有帮助:(谢谢,这很有趣。我使用的是NiFi 1.7.1。那么你的意思是我必须使用AvroSchemaRegistry来克服财产名称中的数字问题吗?我以前没有使用注册表(将架构直接放入处理器/控制器字段中。使用数字JSON属性解决问题后,我可以使用UpdateRecord(支持批处理)而不是JoltTransferorMJSON处理器。我的意思是,如果没有AvroschemareRegistry,就不可能更改行为,例如通过设置“验证字段名称”是否为false?因为只要我的Avro架构中的属性名以NiFi 1.7.1中的一个数字开头,我就可以执行无效字符异常。@SergeyShcherbakov,我认为如果不使用AvroSchemaRegistry,我们就不能
验证字段名
,我认为使用UpdateRecord processor更改字段名将是跳过AvroSchemaReg的好方法istry。谢谢!请参阅问题中的更新。不幸的是,使用AvroSchemaRegistry没有帮助:(