JOLT转换JSON数组匹配字符串赋值时字段缺失问题求解
问题原因
你的spec报错核心是Jolt层级引用计数错误,规则是从当前节点所在层级从0开始向上计数:
#true所在层级(当前):层级0- 匹配
Yes/No的分支层级:层级1 living字段所在层级:层级2familyMembers数组元素的下标层级:层级3
你第一版用&1取到的是Yes/No的键值,路径匹配错误导致living字段丢失;第二版用[#]取到的是当前匹配分支的同级下标,导致两个布尔值都塞到了第一个数组元素的living字段中。
正确的Spec写法
写法1:单Shift操作(一步完成)
[ { "operation": "shift", "spec": { "familyMembers": { "*": { "name": "familyMembers[&1].firstName", "living": { "Yes": { "#true": "familyMembers[&3].living" }, "No": { "#false": "familyMembers[&3].living" } } } } } } ]
写法2:拆分操作(逻辑更清晰,易维护)
先完成字段重命名,再做值转换,避免层级引用错误:
[ { "operation": "shift", "spec": { "familyMembers": { "*": { "name": "familyMembers[&1].firstName", "living": "familyMembers[&1].living" } } } }, { "operation": "modify-overwrite-beta", "spec": { "familyMembers": { "*": { "living": "=toString(@(1,living) == 'Yes' ? true : false)" } } } } ]
两种写法都可以输出你预期的结果。
内容的提问来源于stack exchange,提问作者Roman Svystun
相关产品推荐
相关产品推荐

