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

如何用JSONata将外部邮箱数据添加到现有通讯对象数组

使用JSONata将外部数据合并到现有数组的解决方案

问题描述

如何使用JSONata将外部数据添加到现有数组中?现有一个电话号码数组,需将合并后的结果命名为communication,同时将数组外的邮箱作为通讯类型加入到这个数组里。

原始数据

{
  "customer": {
    "email": "joe@home.com",
    "doNotEmail": "true",
    "phones": [
      {
        "key": "0",
        "number": "2222222222",
        "preferredContactTime": "UNKNOWN",
        "sendTextMessages": false,
        "type": "HOME"
      },
      {
        "key": "1",
        "number": "3333333333",
        "preferredContactTime": "UNKNOWN",
        "sendTextMessages": false,
        "type": "HOME"
      },
      {
        "key": "2",
        "number": "2222222222",
        "preferredContactTime": "UNKNOWN",
        "sendTextMessages": false,
        "type": "HOME"
      }
    ]
  }
}

尝试的代码

"communication": $append(customer.phones.{
"channelType": "Phone",
"channelCode": type,
"completeNumber": number
},{$$.customer.email, $$.customer.privacy.okToContact),

期望输出

{
  "communication": [
    {
      "emailAddress": "joe@home.com",
      "channelType": "Email",
      "channelCode": "Personal",
      "privacy": [
        {
          "okToContact": true
        }
      ]
    },
    {
      "channelType": "Phone",
      "channelCode": "Home",
      "completeNumber": "222-222-2222"
    },
    {
      "channelType": "Phone",
      "channelCode": "Home",
      "completeNumber": "333-333-3333"
    },
    {
      "channelType": "Phone",
      "channelCode": "Home",
      "completeNumber": "222-222-2222"
    }
  ]
}

解决方案

你之前的代码问题在于$append的第二个参数没有构造正确的对象结构,且缺少号码格式化、字段转换的逻辑。以下是符合需求的JSONata表达式:

{
  "communication": [
    {
      "emailAddress": customer.email,
      "channelType": "Email",
      "channelCode": "Personal",
      "privacy": [
        {
          "okToContact": $not($boolean(customer.doNotEmail))
        }
      ]
    }
  ] & customer.phones.{
    "channelType": "Phone",
    "channelCode": $lowercase(type),
    "completeNumber": $replace(number, /(\d{3})(\d{3})(\d{4})/, "$1-$2-$3")
  }
}

关键逻辑说明

  1. 邮箱对象构造:根据原始数据的email和doNotEmail字段,构造符合期望格式的邮箱通讯项,其中okToContact通过$not($boolean(customer.doNotEmail))将字符串类型的doNotEmail转为布尔值后取反,匹配期望输出的逻辑。
  2. 电话号码处理:遍历原始phones数组,对每个对象做字段映射:
    • 将type字段转为小写(如HOME→Home)
    • 用正则表达式$replace给10位电话号码添加分隔符,格式化为XXX-XXX-XXXX
  3. 数组合并:使用JSONata的&运算符,直接将邮箱对象数组与处理后的电话号码数组合并,实现把外部邮箱数据加入现有数组的需求。

内容的提问来源于stack exchange,提问作者Tim Morford

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 16:45:41