JOLT转换多嵌套JSON数组时供应商银行数据错位问题
错位原因
银行数据和供应商匹配错位,核心是JOLT shift操作中&通配符的层级索引取值错误,两个数组下标写反了位置。
从配置BankKey映射规则的层级开始向上数,各层&n对应的实际值如下:
&1:向上1层是BankDetailSet.results下的遍历*,对应单条银行记录在所属供应商银行数组内的下标&4:向上4层是d.results下的遍历*,对应单条供应商在主供应商数组内的下标
原有Spec中银行字段的写入路径为vendors[&1].Bank[&4].bsb,相当于用银行的下标定位供应商,用供应商的下标定位银行位置,处理时就会出现:第一个供应商的第2条银行被写到第二个供应商条目下,第二个供应商的第1条银行被写到第一个供应商条目下,正好形成你看到的交叉错位结果。
正确JOLT Spec
[ { "operation": "shift", "spec": { "d": { "results": { "*": { "VendorNumber": "vendors.[&1].name", "VendorName": "vendors.[&1].VendorName", "BankDetailSet": { "results": { "*": { "BankKey": "vendors[&4].Bank[&1].bsb", "BankAccount": "vendors[&4].Bank[&1].account_number" } } } } } } } } ]
修正逻辑为调换两个下标的位置:用&4定位供应商数组位置,用&1定位当前供应商下银行数组的位置,就能保证银行数据不会跨供应商串位,转换结果和期望输出完全一致。
实用技巧:后续编写JOLT shift规则计算
&n索引时,从当前配置字段的层级开始,每向外退一层嵌套大括号,n值加1,直到数到目标数组对应的*遍历层,就能拿到正确的索引值,避免这类下标错位问题。
内容的提问来源于stack exchange,提问作者Athar Iqbal
相关产品推荐
相关产品推荐

