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

求适配含/不含Phone数组的JSON的Jolt转换规则

Jolt 规则适配三类输入场景解决方案

需求回顾

需要处理三类JSON输入:

  • 包含非空Phone数组的对象
  • Phone为空数组的对象
  • 无Phone字段的对象

要求:

  1. 非空Phone数组:将每个数组元素拆分为独立对象,保留原对象的Name和Email字段
  2. Phone为空数组或无Phone字段:直接保留原对象结构

适配后的Jolt规则

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "Phone": {
          "*": {
            "@2,Name": "[&1].Name",
            "@2,Email": "[&1].Email",
            "@": "[&1].Phone"
          }
        },
        "Name": "temp.Name",
        "Email": "temp.Email"
      }
    }
  },
  {
    "operation": "default",
    "spec": {
      "0": "${temp}"
    }
  },
  {
    "operation": "remove",
    "spec": {
      "temp": ""
    }
  }
]

规则说明

  1. Shift 操作:
    • 遍历Phone数组元素,将每个元素与上层的Name、Email组合成新对象存入数组
    • 同时暂存原对象的Name和Email到temp节点,用于后续补全场景
  2. Default 操作:
    • 如果Shift操作后未生成数组(对应Phone为空数组或无此字段的情况),将temp中的原对象赋值到结果数组的第0位
  3. Remove 操作:清理临时存储的temp节点,避免干扰输出结构

测试示例

示例1:包含非空Phone数组的输入

{
  "Name": "Alice",
  "Email": "alice@example.com",
  "Phone": ["123456", "789012"]
}

输出:

[
  {
    "Name": "Alice",
    "Email": "alice@example.com",
    "Phone": "123456"
  },
  {
    "Name": "Alice",
    "Email": "alice@example.com",
    "Phone": "789012"
  }
]

示例2:Phone为空数组的输入

{
  "Name": "Bob",
  "Email": "bob@example.com",
  "Phone": []
}

输出:

[
  {
    "Name": "Bob",
    "Email": "bob@example.com",
    "Phone": []
  }
]

示例3:无Phone字段的输入

{
  "Name": "Charlie",
  "Email": "charlie@example.com"
}

输出:

[
  {
    "Name": "Charlie",
    "Email": "charlie@example.com"
  }
]

内容的提问来源于stack exchange,提问作者tabassum mahanaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:40:57