kettle庖丁解牛第20篇之JSON输出
Posted 飞哥大数据
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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条目名称 | 最终保存json数据它的名字 |
一个数据条目的数据行 | 意思是分组输出,0默认全部分为一组输出,其他比如1,就是每1行数据一组,分批输出到多个文件中 |
输出值 | 输出到流里的字段名称 |
兼容模式 | 兼容模式 |
文件名 | 数据最终输出到的目标文件 |
追加方式 | 以追加方式输出到文件,就是不覆盖,而是输出到文件尾部 |
创建父文件夹 | 创建父文件夹 |
启动时不创建文件 | 转换启动时不创建js文件 |
扩展名 | 数据最终保存的文件扩展名 |
编码 | 数据最终保存到文件中的编码格式 |
发送结果到servlet | 发送结果到servlet; |
添加日期到文件名 | 选择在扩展名之前输出日期,例如: |
添加时间到文件名 | 选择在扩展名之前输出时间,例如: |
显示文件名 | 最终你的数据保存到目标文件名 |
结果中添加文件名 | 选择将文件名添加到内部文件名结果集。此内部结果集稍后可用于处理所有已创建的文件 |
字段
选项说明
选项 | 描述 |
字段名 | 数据流中的列名 |
元素名称 | 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文件中。
兄弟们,其实想和作是有一段距离的,你想着想着就没有了,可是你做着做着,它就落地了。
啥都别说了,兄弟们后面跟着我干就完了,我们依然掰开揉碎的方式去说。后续的内容更精彩,敬请期待,感谢兄弟们的关注!!
以上是关于kettle庖丁解牛第20篇之JSON输出的主要内容,如果未能解决你的问题,请参考以下文章