Jolt配置问题:如何将偏移值与默认值合并到同一子对象
Jolt JSON转换问题:默认值合并到子对象的错误分析与修正
问题原因分析
- 第三个shift操作中,
"*": "Data.Accounts.[&1].&"会将Accounts数组每个元素下的Account对象原样复制到目标路径,但后续@(3,Attribute)又尝试向Data.Accounts.[&1].Account.Attribute1写入值。Jolt处理同一路径下先有对象、后新增键值的场景时,错误地将Account转换为数组,把原对象和新生成的{Attribute1: "default"}拆分为数组元素。 - 同时,default操作在根节点添加
Attribute字段,后续@(3,Attribute)的层级定位不准确,进一步导致赋值逻辑混乱,无法正确将默认值合并到已有Account对象中。
修正方案
方案一:使用modify-default-beta操作(推荐)
先通过shift生成基础结构,再用modify-default-beta为每个Account对象添加默认属性,该操作会保留原有属性,仅补充缺失的默认值:
[ { "operation": "shift", "spec": { "banking_account": { "accounts": { "*": { "accountId": "Data.Accounts.[&1].Account.Identification" } } } } }, { "operation": "modify-default-beta", "spec": { "Data": { "Accounts": { "*": { "Account": { "Attribute1": "default" } } } } } } ]
方案二:单一shift操作完成转换
在同一个shift操作中,既映射原有字段,又直接通过常量赋值添加默认值,一步到位避免多步操作的结构问题:
[ { "operation": "shift", "spec": { "banking_account": { "accounts": { "*": { "accountId": "Data.Accounts.[&1].Account.Identification", "#default": "Data.Accounts.[&1].Account.Attribute1" } } } } } ]
验证结果
两种方案均会输出预期的JSON结构:
{ "Data": { "Accounts": [ { "Account": { "Attribute1": "default", "Identification": "id1" } }, { "Account": { "Attribute1": "default", "Identification": "id2" } } ] } }
内容的提问来源于stack exchange,提问作者David Lin
相关产品推荐
相关产品推荐

