如何使用JOLT对二进制数组执行加法并转换为指定JSON结构?
JOLT二进制加法并拆分结果解决方案
输入数据
{ "binaryarray": [ "0100", "0010" ] }
期望输出
{ "field1" : 0, "field2" : 1, "field3" : 1, "field4" : 0 }
JOLT转换规范
[ // 拆分二进制字符串为单字符数组 { "operation": "modify-overwrite-beta", "spec": { "bits1": "=split('', @(1,binaryarray[0]))", "bits2": "=split('', @(1,binaryarray[1]))" } }, // 将两个数组的对应位配对 { "operation": "shift", "spec": { "bits1": { "*": { "@": "positions[&1][0]" } }, "bits2": { "*": { "@": "positions[&1][1]" } } } }, // 计算每一位的和(自动将字符转整数) { "operation": "modify-overwrite-beta", "spec": { "positions": { "*": { "sum": "=intSum(@(1,[0]), @(1,[1]))" } } } }, // 将结果映射为指定字段 { "operation": "shift", "spec": { "positions": { "0": { "sum": "field1" }, "1": { "sum": "field2" }, "2": { "sum": "field3" }, "3": { "sum": "field4" } } } } ]
转换说明
- 拆分字符串:通过
split('', ...)将每个二进制字符串拆分为单个字符组成的数组,方便逐位处理。 - 配对对应位:用shift操作把两个数组的同位置字符放到同一个子数组中,确保每一位的两个数字可以对应相加。
- 逐位求和:利用
intSum函数将字符形式的数字转为整数并求和,得到每一位的计算结果。 - 映射为目标字段:将每一位的求和结果分别映射到
field1至field4,与期望输出结构匹配。
注意事项
如果需要处理带进位的二进制加法(如两个二进制位相加结果大于1的情况),由于JOLT不支持循环迭代,需要手动定义进位传递逻辑,从最低位开始计算并将进位值传递到前一位,这种场景下的转换规范会更复杂,需要根据二进制字符串的长度定制处理步骤。
内容的提问来源于stack exchange,提问作者Sagar
相关产品推荐
相关产品推荐

