如何在Jolt转换中生成同一JSON内的两个独立数组?
Jolt转换:生成两个独立数组的修正方案
问题背景
输入JSON包含listOfActivities和嵌套的InvoiceItemsDetail数组,期望将它们分别转换为字段名大写的listOfActivities数组,以及InvoiceLineItems数组,最终包裹在body节点下,同时将InvoiceItemLineNumber转为字符串类型。原Jolt规范未能生成预期结构,核心问题出在数组遍历逻辑和节点路径定位上。
修正后的Jolt转换规范
[ { "operation": "shift", "spec": { "MainObj": { "SubObj": { "age": "body.age", "Address": "body.Address", "listOfActivities": { "*": { "ActivityId": "body.listOfActivities[&1].ACTIVITY_ID", "ActivityName": "body.listOfActivities[&1].ACTIVITY_NAME" } } }, "ShoppingDetails": { "Invoices": { "*": { "InvoiceItemsDetail": { "*": { "InvoiceItemLineNumber": "body.InvoiceLineItems[&1].INVOICE_ITEM_NO", "CustomerCode": "body.InvoiceLineItems[&1].CUSTOMER_CODE", "Description": "body.InvoiceLineItems[&1].DESCRIPTION" } } } } } } } }, { "operation": "modify-overwrite-beta", "spec": { "body": { "InvoiceLineItems": { "*": { "INVOICE_ITEM_NO": "=toString" } } } } } ]
关键修正点
- 数组遍历逻辑修复:给
listOfActivities添加"*": {}遍历器,用[&1]保留数组索引,确保生成完整的数组结构,而非零散的字段 - 节点路径修正:补上遗漏的
ShoppingDetails层级,将Invoices的定位路径从MainObj.Invoices调整为MainObj.ShoppingDetails.Invoices,匹配输入JSON的实际结构 - 类型转换精准化:在
modify-overwrite-beta中精准定位body.InvoiceLineItems[*].INVOICE_ITEM_NO,避免误处理其他无关字段
验证输出
修正后的规范会生成符合预期的JSON结构:
{ "body": { "age": 30, "Address": "Address", "listOfActivities": [ { "ACTIVITY_ID": 1, "ACTIVITY_NAME": "Activity 1" }, { "ACTIVITY_ID": 2, "ACTIVITY_NAME": "Activity 2" } ], "InvoiceLineItems": [ { "INVOICE_ITEM_NO": "1", "CUSTOMER_CODE": "1234", "DESCRIPTION": "Description1" }, { "INVOICE_ITEM_NO": "2", "CUSTOMER_CODE": "5678", "DESCRIPTION": "Description2" } ] } }
内容的提问来源于stack exchange,提问作者user3691240
相关产品推荐
相关产品推荐

