如何在Apache NiFi中用Jolt转换嵌套JSON至MySQL表
Jolt转换规范适配MySQL表结构
假设的嵌套JSON输入示例
先基于常见的API返回结构给出输入样例,你可以根据实际API输出调整:
{ "brandInfo": { "brandName": "Apple", "models": [ { "modelName": "iPhone 14", "totalCount": 100, "products": [ { "systemCode": "IOS16", "sku": "APL-IP14-001", "sellerInfo": { "sellerName": "Apple Store" } }, { "systemCode": "IOS16", "sku": "APL-IP14-002", "sellerInfo": { "sellerName": "Authorized Reseller" } } ] } ] } }
对应的Jolt转换规范
[ { "operation": "shift", "spec": { "brandInfo": { "brandName": "Brand", "models": { "*": { "modelName": "Model", "totalCount": "total_count_model", "products": { "*": { "systemCode": "systemcode", "sku": "sku", "sellerInfo": { "sellerName": "seller" }, "@(2,brandName)": "Brand", "@(1,modelName)": "Model", "@(1,totalCount)": "total_count_model" } } } } } } }, { "operation": "shift", "spec": { "products": { "*": "[]" } } } ]
转换说明
第一步Shift操作:
- 映射顶层品牌名到
Brand字段,模型名到Model,模型总数量到total_count_model - 遍历每个产品条目,将
systemCode、sku、卖家名字分别映射到目标列systemcode、sku、seller - 通过
@(n,key)语法,将上层的品牌、模型、总数量字段复制到每个产品条目里,保证每行数据都包含完整的目标列
- 映射顶层品牌名到
第二步Shift操作:
- 将嵌套在
products数组里的每个条目提取出来,形成一个扁平化的数组,每个数组元素对应MySQL表的一行数据
- 将嵌套在
自定义调整要点
- 如果你的API返回字段名不同,直接修改
spec里的键对应关系(比如你的API里品牌字段叫brand,就把brandName改成brand) - 如果嵌套层级不同,调整
@(n,key)中的n值(n表示向上追溯的层级数,比如要取上两层的字段就用@(2,key)) - 如果存在多个品牌或模型,
*通配符会自动遍历所有数组元素,无需额外修改
内容的提问来源于stack exchange,提问作者bibiji
相关产品推荐
相关产品推荐

