您的位置 首页 java

Kettle(PDI)转换中输出之JSON输出详解

概述

JSON output(JSON输出)此步骤允许根据输入步骤值生成Json块。输出json将作为java脚本数组或java脚本对象,这取决于步骤设置。

选项

Kettle(PDI)转换中输出之JSON输出详解

JSON output(JSON输出)步骤有以下选项:

Step name(步骤名称): 在画布上指定JSON output(JSON输出)步骤的唯一名称。您可以自定义名称或将其保留为默认名称。

  • 一般选项卡

一般选项卡允许指定步骤操作的类型,输出json结构,步骤输出文件。此文件将用于转储所有生成的json。

Operation(操作): 指定步骤操作类型。目前可提供3种操作方式:1.Output value:只将输出json作为步进输出字段传递,不转储到输出文件;2.写入到文件:只写入到文件,不传递到输出字段;3.Output value and write to file:转储到文件并将生成的json作为步骤输出文件传递。

Json block name(Json条目名称): 这个值将用作json块的名称。可以是空字符串,这将影响输出json结构。

Nr. rows in a block(一个数据条目的数据行): json块键值对的数目。注意,1是一个特殊值,在1的情况下,每个输出将作为一个对象生成。

Output value(输出值): 此值将用作步骤的输出字段。将根据步骤设置包含生成的json输出块。

Compatibility mode(兼容模式): 此复选框处理与以前水壶版本的兼容性配置(如果选中PDI 4.3.0之前,则选中PDI 4.3.0之后)。

兼容模式是从PDI 4.3.0版本开始引入的。这是为了处理json结构生成的变化。默认情况下使用最新的fixed模式。要启用兼容模式,请选中“兼容模式”复选框。

例如,有一个步骤带有2个字段的行输入数据:字段为:“name“,并带有字符串值的“item“和字段为:“value“,并带有数值25。我们有4行带有“name”和“value”的数据。

假设Json输出步骤有一下设置组合:

Json条目名称值为:data

一个数据条目的数据行的值为:3

兼容模式:默认,不选中

Josn输出步骤将生成下面的输出内容:

{

“data” : [ {

“name” : “item”,

“value” : 25

}, {

“name” : “item”,

“value” : 25

}, {

“name” : “item”,

“value” : 25

} ]

}{

“data” : [ {

“name” : “item”,

“value” : 25

} ]

}

所以我们有两个对象,第一个对象有一个’data’ (Json块名)数组包含3个Json对象(因为块中的行数是3)和第二个对象数组只包含一个对象。3+1实际上是处理了4行。

如果兼容性模式是启用的,步骤有如下设置组合:

Json条目名称值为:data

一个数据条目的数据行的值为:3

兼容模式:选中

Josn输出步骤将生成下面的输出内容:

{“data”:[{“name”:”item”},{“value”:25},{“name”:”item”},{“value”:25},{“name”:”item”},{“value”:25}]}

{“data”:[{“name”:”item”},{“value”:25}]}

优雅的格式不会影响兼容性模式。我们有两个json输出对象。第一个对象捕获前3个输入行,第二个对象只捕获一行。这是因为一个块中的行数是3。无论如何,它可以被认为是不正确的结果,因为数组的第一个输出对象的实际对象计数为6。默认情况下兼容性模式是禁用的。

如果‘Json条目名称’是一个空字符串(默认情况下它有‘data’值)-兼容模式将使用空字符串块名。正常-如果兼容性模式没有检查,步骤输出将是:

[ {

“name” : “item”,

“value” : 25

}, {

“name” : “item”,

“value” : 25

}, {

“name” : “item”,

“value” : 25

} ][ {

“name” : “item”,

“value” : 25

} ]

我们有两个json数组,第一个数组包含3项,第二个数组包含1项。

另一种特殊情况是当’ 一个数据条目的数据行’ 设置为:1。

如果使用空Json条目名称输出将会是:

{

“name” : “item”,

“value” : 25

}{

“name” : “item”,

“value” : 25

}{

“name” : “item”,

“value” : 25

}{

“name” : “item”,

“value” : 25

}

我们将只有4个简单的json对象,它们将作为4个步输出行输出。

如果Json条目名称被定义-输出结构将看起来像:

{

“data” : {

“name” : “item”,

“value” : 25

}

}{

“data” : {

“name” : “item”,

“value” : 25

}

}{

“data” : {

“name” : “item”,

“value” : 25

}

}{

“data” : {

“name” : “item”,

“value” : 25

}

}

这是相同的4个输出对象,定义了Json条目名称。

如果’ 一个数据条目的数据行’小于1输出将作为一个对象:

{

“data” : [ {

“name” : “item”,

“value” : 25

}, {

“name” : “item”,

“value” : 25

}, {

“name” : “item”,

“value” : 25

}, {

“name” : “item”,

“value” : 25

} ]

}

这将是一个对象(一个输出行),其数据块包含4个对象的json数组(正如我们有4个输入数据行)。请注意-当 ‘一个数据条目的数据行’为0,步骤将构建输出对象,直到输入数据可用。当输入完成时,一个大的输出对象将被传递到输出行。对于较大量的输入数据,它会影响内存的使用。

Filename(文件名): 输出文件的完整路径

Append(追加方式): 如果没有选中,将在每一步运行时创建新文件。如果指定名称的文件已经存在,它将被替换为一个新的。如果勾选,新的json输出将被追加到现有文件的末尾。或者如果现有的文件不存在,它将像前面的情况一样被创建。

Create Parent folder(创建父文件夹): 通常文件名称包含一些路径文件夹作为父文件夹。如果父文件夹不存在并且选中此选项,父文件夹将作为一个新文件夹创建。否则,文件找不到,步骤将失败。

Do not open create at start(启动时不创建文件): 如果没有选中,文件(在某些情况下是父文件夹)将在转换初始化期间被创建/打开并写入。如果选中,文件和父文件夹创建将在步骤将获得任何输入数据之后。

Extension(扩展名): 输出文件扩展名。默认值为“js”。

Encoding(编码): 输出文件编码。

Pass output to servlet(发送结果到 servlet): 启用此选项以通过web服务返回数据,而不是写入文件(请参阅web服务上的PDI数据)

Include date in filename?(添加日期到文件名): 如果选中此项,输出文件名将包含文件名值+当前日期。这可能有助于生成唯一的输出文件。

Include time in filename(添加时间到文件名): 如果选中此项,输出文件名将包含文件创建时间。与“添加日期到文件名”选项相同。

Show filename(s) (显示文件名): 是否可用于测试完整的输出文件路径。

Add file to result filenames?(添加文件到结果文件中): 如果选中此项,则创建的输出文件路径将可从步骤结果中访问。

  • 字段选项卡

此选项卡用于将输入步骤字段映射到输出json值。

Fieldname(字段名): 输入步骤字段名。使用“获取字段”按钮来发现可用的输入字段。

Element name(元素名称): Json元素名作为键。例如“A”:“B”- A是一个元素名,B是这个元素名映射的实际输入值。

示例

示例采用代码表与用户表,代码表里存放用户性别代码跟名称,用户里面存放用户跟用户的性别代码。为了演示,sql语句很简化,不可以作为实际业务场景,其表sql语句如下。

/*用户表 */

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (

`username` varchar(20) NOT NULL,

`truename` varchar(50) DEFAULT NULL,

`gender` varchar(50) DEFAULT NULL,

PRIMARY KEY (`username`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into `user`(`username`,`truename`,`gender`) values (‘hanmeimei’,’韩梅梅’,’女’);

insert into `user`(`username`,`truename`,`gender`) values (‘lisi’,’李四’,’男’);

insert into `user`(`username`,`truename`,`gender`) values (‘zhangsan’,’张三’,’男’);

演示效果是把用户表内容生成一个Json格式的文件。

1.建立数据库连接对象

示例采用mysql数据库作为示例,首先下载mysql驱动,然后放在在文件夹data-integrationlib下。然后重启Spoon。如果已经添加过mysql驱动,则可忽略此步骤。

切换至主对象树,双击DB连接。

Kettle(PDI)转换中输出之JSON输出详解

添加DB连接

然后选项连接类型为mysql,并维护相关的链接信息。

Kettle(PDI)转换中输出之JSON输出详解

维护数据库连接

连接信息维护完之后,点击测试,测试连接是否成功。

2.获取用户表User数据作为数据输入源。

添加一个表输入步骤,数据库连接上面创建的DB连接名称demo,然后从获取SQL查询语句中选择表User,即可。

Kettle(PDI)转换中输出之JSON输出详解

选择用户表

最后点击预览,预览结果数据。

Kettle(PDI)转换中输出之JSON输出详解

3.添加JSON输出步骤,并配置JSON输出选项内容

添加一个输出中的JSON输出步骤。并建立从表输入到JSON输出的一个节点连接。

Kettle(PDI)转换中输出之JSON输出详解

建立节点连接

JSON输出步骤上配置操作为:写到文件;一个数据条目的数据行数:3;文件名:F:user;扩展名:json。

Kettle(PDI)转换中输出之JSON输出详解

设置相关选项内容

然后切换至字段选项卡,点击获取字段,并点击确定。

Kettle(PDI)转换中输出之JSON输出详解

获取字段

最后保存并点击运行。

Kettle(PDI)转换中输出之JSON输出详解

最后查看用户表数据。

Kettle(PDI)转换中输出之JSON输出详解

生成的文件

Kettle(PDI)转换中输出之JSON输出详解

文件内容

文章来源:智云一二三科技

文章标题:Kettle(PDI)转换中输出之JSON输出详解

文章地址:https://www.zhihuclub.com/175493.shtml

关于作者: 智云科技

热门文章

网站地图