SplitJson


编辑人(全网同名):酷酷的诚 邮箱:zhangchengk@foxmail.com


描述

该处理器使用JsonPath表达式指定需要的数组元素,将JSON数组分割为多个单独的流文件。每个生成的流文件都由指定数组的一个元素组成,并传输到关系“split”,原始文件传输到关系“original”。如果没有找到指定的JsonPath,或者没有对数组元素求值,则将原始文件路由到“failure”,不会生成任何文件。

该处理器需要使用人员掌握JsonPath表达式语言。

属性配置

在下面的列表中,必需属性的名称以粗体显示。任何其他属性(不是粗体)都被认为是可选的,并且指出属性默认值(如果有默认值),以及属性是否支持表达式语言。

属性名称默认值可选值描述
JsonPath Expression一个JsonPath表达式,它指定用以分割的数组元素。
Null Value Representation1▪empty string
▪the string 'null'
指定结果为空值时的表示形式。

连接关系

名称描述
failure如果一个流文件处理失败(例如,流文件不是有效的JSON数组或者指定的JsonPath路径不存在),它将被路由到这个关系
original被分割成段的原始流文件。如果流文件处理失败,则不会向该关系发送任何内容
split成功分割的流文件结果路由到这个关系

读取属性

没有指定。

写属性

名称描述
fragment.identifier从同一个父流文件生成的所有分割流文件都将为该属性添加相同的UUID(随机生成)
fragment.index一个增长的数字,表示从单个父流文件创建的分割流文件的顺序
fragment.count从父流文件生成的分割流文件的数量
segment.original.filename父流文件的文件名

状态管理

此组件不存储状态。

限制

此组件不受限制。

输入要求

此组件需要传入关系。

系统资源方面的考虑

资源描述
内存分割生成的流文件,以及被分割流文件的全部内容(作为JsonNode对象)会读入内存。由于JSON的大小或由于配置输出大量的分割文件,则可能过度使用内存,此时可能需要分阶段进行来避免过度使用内存。

应用场景

该处理器主要用于分割json数组,灵活运用时也可做数据清洗(比如需要抽取json中某一个字段)。

示例说明

1:下面是该处理器应用最多的情况,如下图为一json数组

在SplitJson中配置JsonPath为 $.* (匹配数组任意元素)

split关系中输出3个分割文件,original关系中输出被分割原文件。

2:举例说明该处理器的复杂使用,如下图为一多层次结构json数组,需要分割取出json数组中的father字段。

配置JsonPath为$.*.family.father

结果:

Last Updated:
Contributors: zhangcheng