You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写兼容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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 01:50:29