kettle庖丁解牛第20篇之JSON输出

幼敏悟过人,读书辄成诵。这篇文章主要讲述kettle庖丁解牛第20篇之JSON输出相关的知识,希望能为你提供帮助。
引言在上一篇文章中,我们主要讲解的是:kettle中的Microsoft Excel 输出组件。
在本篇文章中,我们主要讲解的是:JSON输出组件(JSON output)。
要想学明白JSON输出组件,我们就有必要扩展着聊聊,JSON的那些事了。
JSON简介JSON的全称是"javascript Object Notation",意思是javaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。XML也是一种数据交换格式,为什么没有选择XML呢?
因为XML虽然可以作为跨平台的数据交换格式,但是在JS(JavaScript的简写)中处理XML非常不方便,同时XML标记比数据多,增加了交换产生的流量,而JSON没有附加的任何标记,在JS中可作为对象处理,所以更倾向于选择JSON来交换数据。
JSON3种数据结构键值对
键值对是JSON中最基本的数据结构

  "Name": "大飞哥"

在上面的例子中属性"Name"是用一对双引号括起来的一个字符串。而它的值"大飞哥"在这个例子中也是一个字符串,当然它还可以是其他类型。
对象
一个JSON对象是包含了一组未排序键值对的集合。

        "person" :
        "age" : "35",
        "sex" : "男",
        "name" : "大飞哥",
        "weight" : "75kg",
        "height" : "170cm"
                         
       
上面的例子中person对象包含了5个属性,它们之间用,进行分割。
数组
JSON中用[]来表示数组元素

          "people" : [
                              "firstName": "大", "lastName": "飞哥", "age": 35 ,
                              "firstName": "大", "lastName": "数据", "age": 32
                          ]
       
JSON6种数据类型string类型
字符串,必须要用双引号引起来。
number类型
数值,与JavaScript的number一致,整数(不使用小数点或指数计数法)最多为15位,小数的最大位数是17。
object类型
JavaScript的对象形式, key:value表示方式,可嵌套。
array类型
数组,JavaScript的Array表示方式[value],可嵌套。
布尔类型
true/false,JavaScript的boolean类型。
null类型
空值,JavaScript的null。
JSON的优缺点优点
a、数据格式比较简单,易于读写,格式都是压缩的,占用带宽小;
b、易于解析,客户端JavaScript可以通过eval()进行JSON数据的读取;  
c、支持多种语言,便于服务器端的解析;    
d、直接为服务器端代码使用,简化服务器端和客户端的代码开发量,并且易于维护。
缺点
a、没有XML格式推广的好,没有XML那么通用性;  
b、JSON格式目前在Web Service中,推广还属于初级阶段。
JSON相关网址json中文官网
http://www.json.org/json-zh.html
json官网
http://www.json.org/
转换转换(transaformation)是ETL解决方案中最主要的部分,它处理抽取、转换、加载各种对数据行的操作。
创建转换
我们要做的ETL操作,全是在转换中设计的,所以我们要先创建一个转换。


保存转换

给你新建的转换,起个名字,并保存


JSON输出此组件可以实现,将数据流以JSON的格式输出到文件中保存。


一般

选项说明

选项
描述
操作
分为3种,write tofile是直接写到js文件,Output value是以值的方式输出到流里,Output value and write to file是即输出到js文件又输出到值里
JSON条目名称
【kettle庖丁解牛第20篇之JSON输出】最终保存json数据它的名字
一个数据条目的数据行
意思是分组输出,0默认全部分为一组输出,其他比如1,就是每1行数据一组,分批输出到多个文件中
输出值
输出到流里的字段名称
兼容模式
兼容模式
文件名
数据最终输出到的目标文件
追加方式
以追加方式输出到文件,就是不覆盖,而是输出到文件尾部
创建父文件夹
创建父文件夹
启动时不创建文件
转换启动时不创建js文件
扩展名
数据最终保存的文件扩展名
编码
数据最终保存到文件中的编码格式
发送结果到servlet
发送结果到servlet;
添加日期到文件名
选择在扩展名之前输出日期,例如:??_20190816??
添加时间到文件名
选择在扩展名之前输出时间,例如:??_235959??
显示文件名
最终你的数据保存到目标文件名
结果中添加文件名
选择将文件名添加到内部文件名结果集。此内部结果集稍后可用于处理所有已创建的文件
字段
选项说明
选项
描述
字段名
数据流中的列名
元素名称
json数据中的key名
实战演示我们要演示从txt文件中读取数据,然后通过JSON输出组件,把数据最终保存在js文件中。
a、创建txt文件
我在D盘下,创建一个txt文件,命名为test。第1行是文件表头,从第2行开始是数据。此文件有3列数据,每1列通过","分割。我使用的分割符,它是英文的。你要注意你的分割符,它是中文的?还是英文的?

b、创建转换

c、文本文件输入设置
增加txt文件做为数据源




设置数据源txt文件,每1列数据之间使用","分割。并且第1行要跳过,从第2行开始是数据。

从数据源txt文件中,获取表头字段名



设置最小宽度(防止报错:kettle java.lang.OutOfMemoryError: Requested array size exceeds VM limit)


d、文本文件输入预览记录



e、JSON输出组件

使用鼠标左键点击  文本文件输入组件,按住shift键,从文本文件输入组件拖拽到JSON输出组件,拖拽后的效果如下图:

f、JSON输出设置


g、运行转换




h、验证结果文件

实战演示扩展a、JSON输出设置

b、运行转换




c、验证结果文件

d、总结
数据源test.txt中有3行数据,我们在JSON输出设置中,一个数据条目的数据行为1。这样数据源中的3行数据,就分别保存到了3个js文件中。我们打开这3个js文件,看看里面的数据情况。



结束语本篇文章主要讲解了:JSON输出组件的各种详细设置,最后实战演示了,从文本文件中读取数据,然后通过JSON 输出组件,把数据最终保存在js文件中。
兄弟们,其实想和作是有一段距离的,你想着想着就没有了,可是你做着做着,它就落地了。
啥都别说了,兄弟们后面跟着我干就完了,我们依然掰开揉碎的方式去说。后续的内容更精彩,敬请期待,感谢兄弟们的关注!!

    推荐阅读