云数据迁移 CDM-文件格式介绍:JSON格式
JSON格式
- CDM 支持解析的JSON类型
- 记录节点
- 从JSON文件复制数据
- CDM支持解析的JSON类型:JSON对象、JSON数组。
- JSON对象:JSON文件包含单个对象,或者以行分隔/串连的多个对象。
- 单一对象JSON
{ "took" : 190, "timed_out" : false, "total" : 1000001, "max_score" : 1.0 }
- 行分隔的JSON对象
{"took" : 188, "timed_out" : false, "total" : 1000003, "max_score" : 1.0 } {"took" : 189, "timed_out" : false, "total" : 1000004, "max_score" : 1.0 }
- 串连的JSON对象
{ "took": 190, "timed_out": false, "total": 1000001, "max_score": 1.0 } { "took": 191, "timed_out": false, "total": 1000002, "max_score": 1.0 }
- 单一对象JSON
- JSON数组:JSON文件是包含多个JSON对象的数组。
[{ "took" : 190, "timed_out" : false, "total" : 1000001, "max_score" : 1.0 }, { "took" : 191, "timed_out" : false, "total" : 1000001, "max_score" : 1.0 }]
- JSON对象:JSON文件包含单个对象,或者以行分隔/串连的多个对象。
- 记录节点
记录数据的根节点。该节点对应的数据为JSON数组,CDM会以同一模式从该数组中提取数据。多层嵌套的JSON节点以字符“.”分割。
- 从JSON文件复制数据
- 示例一
从行分隔/串连的多个对象中提取数据。JSON文件包含了多个JSON对象,例如:
{ "took": 190, "timed_out": false, "total": 1000001, "max_score": 1.0 } { "took": 191, "timed_out": false, "total": 1000002, "max_score": 1.0 } { "took": 192, "timed_out": false, "total": 1000003, "max_score": 1.0 }
如果您想要从该JSON对象中提取数据,使用以下格式写入到数据库,只需要在作业第一步指定文件格式为“JSON格式”,指定JSON类型为“JSON对象”,然后在作业第二步进行字段匹配即可。表2 示例 took
timedOut
total
maxScore
190
false
1000001
1.0
191
false
1000002
1.0
192
false
1000003
1.0
- 示例二
从记录节点中提取数据。JSON文件包含了单个的JSON对象,但是其中有效的数据在一个数据节点下,例如:
{ "took": 190, "timed_out": false, "hits": { "total": 1000001, "max_score": 1.0, "hits": [{ "_id": "650612", "_source": { "name": "tom", "books": ["book1","book2","book3"] } }, { "_id": "650616", "_source": { "name": "tom", "books": ["book1","book2","book3"] } }, { "_id": "650618", "_source": { "name": "tom", "books": ["book1","book2","book3"] } }] } }
如果想以如下格式写入到数据库,则需要在作业第一步指定文件格式为“JSON格式”,指定JSON类型为“JSON对象”,并且指定记录节点为“hits.hits”,然后在作业第二步进行字段匹配。表3 示例 ID
SourceName
SourceBooks
650612
tom
["book1","book2","book3"]
650616
tom
["book1","book2","book3"]
650618
tom
["book1","book2","book3"]
- 示例三
从JSON数组中提取数据。JSON文件是包含了多个JSON对象的JSON数组,例如:
[{ "took" : 190, "timed_out" : false, "total" : 1000001, "max_score" : 1.0 }, { "took" : 191, "timed_out" : false, "total" : 1000002, "max_score" : 1.0 }]
如果想以如下格式写入到数据库,需要在作业第一步指定文件格式为“JSON格式”,指定JSON类型为“JSON数组”,然后在作业第二步进行字段匹配。
表4 示例 took
timedOut
total
maxScore
190
false
1000001
1.0
191
false
1000002
1.0
- 示例四
在解析JSON文件的时候搭配转换器。在示例二前提下,想要把hits.max_score字段附加到所有记录中,即以如下格式写入到数据库中:
表5 示例 ID
SourceName
SourceBooks
MaxScore
650612
tom
["book1","book2","book3"]
1.0
650616
tom
["book1","book2","book3"]
1.0
650618
tom
["book1","book2","book3"]
1.0
则需要在作业第一步指定文件格式为“JSON格式”,指定JSON类型为“JSON对象”,并且指定记录节点为“hits.hits”,然后在作业第二步添加转换器,操作步骤如下:- 单击添加字段,新增一个字段。
图2 添加字段
- 在添加的新字段后面,单击添加字段转换器。
图3 添加字段转换器
- 创建“表达式转换”的转换器,表达式输入“1.0”,然后保存。
图4 配置字段转换器
- 单击添加字段,新增一个字段。
- 示例一