如何使用JSONata合并同key字典并补全缺失值?
使用JSONata合并两个字典的键值对
现有如下JSON数据:
{ "First": { "example1": [ { "key": "A", "value_1": 5 }, { "key": "B", "value_1": 1 }, { "key": "C", "value_1": 6 }, { "key": "D", "value_1": 8 }, { "key": "E", "value_1": 2 } ] }, "Second":{ "example2": [ { "key": "A", "value_2": 2 }, { "key": "B", "value_2": 1 }, { "key": "C", "value_2": 1 } ] } }
期望得到按key合并的结果,若某个key没有对应的value_2则设为0:
{ "Result":[ { "key": "A", "value_1": 5, "value_2": 2 }, { "key": "B", "value_1": 1, "value_2": 1 }, { "key": "C", "value_1": 6, "value_2": 1 }, { "key": "D", "value_1": 8, "value_2": 0 }, { "key": "E", "value_1": 2, "value_2": 0 } ] }
JSONata实现代码
{ "Result": First.example1.( $merge([ $, { "value_2": $lookup($reduce(Second.example2, {}, ($acc, $item) => $merge([$acc, {$item.key: $item.value_2}])), key, 0) } ]) ) }
代码说明
- 先把
Second.example2的数组转换成键值对对象:用每个元素的key作为键,对应的value_2作为值,这样能快速通过key查找对应值。 - 遍历
First.example1的每一项,将原元素与新生成的value_2字段合并:通过$lookup从上述键值对对象中获取当前key对应的value_2,找不到则返回默认值0。 - 最终将所有合并后的元素整理到
Result数组中。
内容的提问来源于stack exchange,提问作者Imaginary-Pea
相关产品推荐
相关产品推荐

