如何编写Dynamic Jolt规范处理JSON嵌套数组的三种场景?
修复Jolt规范适配单元素/无元素数组场景
原Jolt规范仅在articleMainMaterial数组包含多元素时正常工作,单元素或无数组时失效,以下是修复后的规范及说明:
修改后的Jolt规范
[ { "operation": "default", "spec": { "*": { "payload": { "articleSeason": { "articleMainMaterial": [{}] } } } } }, { "operation": "cardinality", "spec": { "*": { "payload": { "articleSeason": { "articleMainMaterial": "MANY" } } } } }, { "operation": "shift", "spec": { "*": { "payload": { "articleSeason": { "articleMainMaterial": { "*": { "materialComposition": "[&1].materialComposition", "@(2,groupArticleNumber)": "[&1].groupArticleNumber", "@(2,seasonCode)": "[&1].seasonCode", "@(2,groupModelNumber)": "[&1].groupModelNumber", "@(2,salesLine)": "[&1].salesLine" } } } } } } }, { "operation": "default", "spec": { "*": { "materialComposition": null } } } ]
修复逻辑说明
- 第一步Default操作:给无
articleMainMaterial的输入默认添加一个含空对象的数组,确保后续处理有统一结构,避免因字段缺失导致流程中断。 - Cardinality操作:强制
articleMainMaterial为数组类型,彻底解决单元素数组被解析为单个对象的问题,保证多元素、单元素场景的结构一致性。 - Shift操作:遍历
articleMainMaterial数组的每个元素,将当前元素的materialComposition与上层基础字段(groupArticleNumber、seasonCode等)绑定到同一数组项中,[&1]表示使用当前元素的索引作为输出数组的索引。 - 最后一步Default操作:给未包含
materialComposition的数组项(即原输入无articleMainMaterial的场景)设置该字段为null,符合预期输出要求。
验证效果
- 多元素数组输入:生成与元素数量对应的多条记录,字段匹配正确。
- 单元素数组输入:生成一条包含所有字段的记录。
- 无数组输入:生成一条记录,
materialComposition字段为null,其余基础字段正常保留。
内容的提问来源于stack exchange,提问作者Thiyagaraj Narayanan
相关产品推荐
相关产品推荐

