如何用JSONata实现数组逐元素相加并处理null值?
JSONata实现数组逐元素相加并处理null值
需求说明
给定嵌套JSON结构的示例数据,需将channel1和channel2下的samples数组按索引逐元素相加:若任意位置的元素为null,该位置结果保留null;否则返回两数之和。
示例数据
{ "response": { "doc": [ { "channels": { "channel1": { "samples": [1,2,3,4,5] }, "channel2": { "samples": [null,null,3,4,null] } } } ] } }
JSONata解决方案
$zip([ response.doc[0].channels.channel1.samples, response.doc[0].channels.channel2.samples ]).$map(function($pair) { $if($pair[0] = null or $pair[1] = null, null, $pair[0] + $pair[1]) })
代码解释
$zip([数组1, 数组2]):将两个数组按索引配对,生成包含对应元素对的二维数组,示例中生成的配对结果为[[1,null], [2,null], [3,3], [4,4], [5,null]]$map(...):遍历每一组配对元素,通过$if实现判断逻辑:- 若配对元素中任意一个为
null,返回null - 否则返回两个元素的和
- 若配对元素中任意一个为
执行结果
运行上述表达式后,得到期望结果:[null,null,6,8,null]
内容的提问来源于stack exchange,提问作者Sebastian
相关产品推荐
相关产品推荐

