如何通过Jolt将单个对象的键值对添加到数组的每个对象中?
正确配置Jolt:将
jolt_marketplaceMetadata键值对插入数组每个对象 需求说明
将输入JSON中jolt_marketplaceMetadata的所有键值对,添加到jolt_attributes数组的每一个对象内部,同时保留每个数组对象原有的键值对。
输入JSON
{ "jolt_marketplaceMetadata": { "NAN_KEY": 1, "TEMP": 3 }, "jolt_attributes": [ { "name": "HELLO", "yyup": 3 }, { "huh": "please", "work": 2 } ] }
期望输出
{ "jolt_attributes": [ { "name": "HELLO", "yyup": 3, "NAN_KEY": 1, "TEMP": 3 }, { "huh": "please", "work": 2, "NAN_KEY": 1, "TEMP": 3 } ] }
错误尝试及输出
原配置错误地将数组中所有对象的键值对互相合并,导致每个数组对象包含了所有元素的键:
[ { "operation": "shift", "spec": { "jolt_attributes": { "*": { "*": "jolt_attributes[&1].&", "@(2,jolt_marketplaceMetadata)": "jolt_attributes[&1]" } } } } ]
错误输出:
{ "jolt_attributes": [ { "NAN_KEY": 1, "TEMP": 3, "name": "HELLO", "yyup": 3, "huh": "please", "work": 2 }, { "NAN_KEY": 1, "TEMP": 3, "name": "HELLO", "yyup": 3, "huh": "please", "work": 2 } ] }
正确解决方案
问题出在原配置中直接将整个jolt_marketplaceMetadata对象赋值给数组元素,正确的做法是遍历jolt_marketplaceMetadata的每个键值对,逐个映射到当前数组元素中:
[ { "operation": "shift", "spec": { "jolt_attributes": { "*": { // 保留当前数组对象的所有原有键值对 "*": "jolt_attributes[&1].&", // 遍历marketplaceMetadata的每个键,将键值对添加到当前数组对象 "@(2,jolt_marketplaceMetadata.*)": "jolt_attributes[&1].&(0,1)" } } } } ]
配置解释
*: 遍历jolt_attributes数组的每个元素,&1代表当前数组的索引"*": "jolt_attributes[&1].&":将当前数组元素的每个键值对保留到目标位置"@(2,jolt_marketplaceMetadata.*)": "jolt_attributes[&1].&(0,1)":@(2,jolt_marketplaceMetadata.*):向上两层获取jolt_marketplaceMetadata的所有键值对&(0,1):取jolt_marketplaceMetadata.*中的键名(即NAN_KEY、TEMP),作为目标对象的键
内容的提问来源于stack exchange,提问作者Chris Schmitz
相关产品推荐
相关产品推荐

