求适配含/不含Phone数组的JSON的Jolt转换规则
Jolt 规则适配三类输入场景解决方案
需求回顾
需要处理三类JSON输入:
- 包含非空
Phone数组的对象 Phone为空数组的对象- 无
Phone字段的对象
要求:
- 非空
Phone数组:将每个数组元素拆分为独立对象,保留原对象的Name和Email字段 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": "" } } ]
规则说明
- Shift 操作:
- 遍历
Phone数组元素,将每个元素与上层的Name、Email组合成新对象存入数组 - 同时暂存原对象的
Name和Email到temp节点,用于后续补全场景
- 遍历
- Default 操作:
- 如果Shift操作后未生成数组(对应Phone为空数组或无此字段的情况),将
temp中的原对象赋值到结果数组的第0位
- 如果Shift操作后未生成数组(对应Phone为空数组或无此字段的情况),将
- 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
相关产品推荐
相关产品推荐

