如何通过Jolt将Map转List并添加默认条目?
解决Jolt转换时添加默认数组元素的问题
问题描述
输入JSON:
{ "iban": "IR970130100000000000001399", "paymentCode": "124" }
期望输出:
{ "parameters": [ { "name": "iban", "value": "IR970130100000000000001399" }, { "name": "paymentCode", "value": "124" }, { "name": "P_RQID", "value": "4f2ba174-690f-4d41-9bcc-b958789fe6d7" } ] }
原Jolt Spec无法添加默认条目,实际输出缺少P_RQID项。
问题原因
原Spec中的default操作路径错误:parameters是数组类型,而非单个对象,直接给parameters.name赋值无法向数组中添加新元素。default操作仅能为已存在的对象属性设置默认值,无法创建新的数组元素。
解决方案
方案一:使用modify-overwrite-beta追加数组元素
通过modify-overwrite-beta操作的append函数,向已生成的parameters数组中添加默认条目:
[ { "operation": "shift", "spec": { "*": { "$": "parameters.[#2].name", "@": "parameters.[#2].value" } } }, { "operation": "modify-overwrite-beta", "spec": { "parameters": "=append(@,[{\"name\":\"P_RQID\",\"value\":\"4f2ba174-690f-4d41-9bcc-b958789fe6d7\"}])" } } ]
方案二:在shift操作中直接添加默认条目
在第一次shift操作里,通过指定数组索引([2],前两个元素索引为0和1)直接写入默认值,一步完成转换:
[ { "operation": "shift", "spec": { "*": { "$": "parameters.[#2].name", "@": "parameters.[#2].value" }, "#P_RQID": "parameters.[2].name", "#4f2ba174-690f-4d41-9bcc-b958789fe6d7": "parameters.[2].value" } } ]
两种方案均可生成符合预期的输出,方案二更简洁,无需额外操作步骤。
内容的提问来源于stack exchange,提问作者Mehdi Abniki
相关产品推荐
相关产品推荐

