Jolt转换:空对象场景下保留JSON结构的方案问询
Jolt规则修改:处理空arrival对象时保留attributes结构
问题场景
现有Jolt Shift规则可正确转换含非空arrival属性的JSON,但当arrival为空对象时,输出会丢失attributes结构。需要调整规则,实现:
- 非空
arrival:正常执行原有转换 - 空
arrival对象:保留attributes的空结构
示例输入与原有问题
输入1(非空arrival)
{ "arrival": { "attributes": { "key1": "value1", "key2": "value2" } } }
输入2(空arrival对象)
{ "arrival": {} }
原有问题规则(示例)
[ { "operation": "shift", "spec": { "arrival": { "attributes": "attributes" } } } ]
- 处理输入1:得到正确结果
{"attributes": {"key1": "value1", "key2": "value2"}} - 处理输入2:输出
{},丢失attributes结构
解决方案
方案1:结合default与shift操作
通过default操作预先兜底attributes的空结构,再执行原有转换:
[ { "operation": "default", "spec": { "arrival": { "attributes": {} } } }, { "operation": "shift", "spec": { "arrival": { "attributes": "attributes" } } } ]
效果
- 输入1转换结果:
{ "attributes": { "key1": "value1", "key2": "value2" } }
- 输入2转换结果:
{ "attributes": {} }
方案2:纯Shift规则兜底
无需额外操作,直接在Shift规则中通过层级引用处理空对象场景:
[ { "operation": "shift", "spec": { "arrival": { "attributes": "attributes", "*": { "@(2,arrival.attributes)": "attributes" } } } } ]
说明
当arrival为空对象时,*匹配不到任何子键,此时通过@(2,arrival.attributes)引用arrival下的attributes(默认空结构),从而保留attributes键。
内容的提问来源于stack exchange,提问作者vinayak gupta
相关产品推荐
相关产品推荐

