编写兼容attachment数组与对象的JOLT转换规则
JOLT规则适配数组/对象类型attachment的解决方案
需求说明
需实现JOLT转换逻辑:
- 当
attachments.attachment为数组时,遍历数组内每个对象,将其name字段映射到data数组的filename字段 - 当
attachments.attachment为单个对象时,将其name字段映射到data对象的filename字段
现有规则仅支持数组场景,对象场景输出NULL,需调整规则适配两种情况。
输入输出示例
数组类型输入
{ "IntegrationEntities": { "integrationEntity": [ { "integrationEntityHeader": { "attachments": { "attachment": [ { "name": "EV10044.docx" }, { "name": "Test1.txt" } ] } } } ] } }
现有JOLT规则
[ { "operation": "shift", "spec": { "IntegrationEntities": { "integrationEntity": { "*": { "integrationEntityHeader": { "attachments": { "attachment": { "*": { "name": "data[&1].filename" } } } } } } } } } ]
数组输入下的当前输出
{ "data": [ { "filename": "EV10044.docx" }, { "filename": "Test1.txt" } ] }
对象类型输入
{ "IntegrationEntities": { "integrationEntity": [ { "integrationEntityHeader": { "attachments": { "attachment": { "name": "EV10044.docx" } } } } ] } }
对象输入下的期望输出
{ "data": { "filename": "EV10044.docx" } }
修改后的JOLT规则
[ { "operation": "shift", "spec": { "IntegrationEntities": { "integrationEntity": { "*": { "integrationEntityHeader": { "attachments": { "attachment": { "*": { "name": "data[&1].filename" }, "name": "data.filename" } } } } } } } } ]
规则解释
在attachment节点下同时配置两个匹配逻辑:
"*": { "name": "data[&1].filename" }:针对数组类型的attachment,*遍历数组索引,&1引用当前索引值,将数组内每个对象的name映射到data数组对应位置的filename字段"name": "data.filename":针对单个对象类型的attachment,直接将对象的name字段映射到data.filename
两种规则互不干扰:数组场景下,数组元素会触发第一个规则,第二个规则因数组元素内部没有直接的name节点(name在元素对象里)而不生效;对象场景下,直接触发第二个规则,第一个规则因对象不是数组结构而不生效,从而同时兼容两种输入格式。
内容的提问来源于stack exchange,提问作者Alexa
相关产品推荐
相关产品推荐

