如何用jq按顺序合并两个JSON对象列表中的对应对象?
同步迭代两个对象列表并合并对应对象
需求:同步迭代两个对象列表,将对应位置的对象合并为一个新对象,两个列表的对象无重复键,可直接转换为数组处理。
第一个输入对象列表
{ "k11": "v111", "k12": "v112" } { "k11": "v121", "k12": "v122" } { "k11": "v131", "k12": "v132" }
第二个输入对象列表
{ "k21": "v211", "k22": "v212" } { "k21": "v221", "k22": "v222" } { "k21": "v231", "k22": "v232" }
期望输出对象列表
{ "k11": "v111", "k12": "v112", "k21": "v211", "k22": "v212" } { "k11": "v121", "k12": "v122", "k21": "v221", "k22": "v222" } { "k11": "v131", "k12": "v132", "k21": "v231", "k22": "v232" }
解决方案示例
Python实现
将两个对象列表转换为数组后,用zip同步迭代对应位置的对象,通过字典解包合并:
list1 = [ {"k11": "v111", "k12": "v112"}, {"k11": "v121", "k12": "v122"}, {"k11": "v131", "k12": "v132"} ] list2 = [ {"k21": "v211", "k22": "v212"}, {"k21": "v221", "k22": "v222"}, {"k21": "v231", "k22": "v232"} ] result = [{**obj1, **obj2} for obj1, obj2 in zip(list1, list2)] # 输出合并后的对象 for item in result: print(item)
输出结果:
{'k11': 'v111', 'k12': 'v112', 'k21': 'v211', 'k22': 'v212'} {'k11': 'v121', 'k12': 'v122', 'k21': 'v221', 'k22': 'v222'} {'k11': 'v131', 'k12': 'v132', 'k21': 'v231', 'k22': 'v232'}
JavaScript实现
使用map方法遍历第一个列表,同时通过索引获取第二个列表对应位置的对象,用对象展开语法合并:
const list1 = [ {"k11": "v111", "k12": "v112"}, {"k11": "v121", "k12": "v122"}, {"k11": "v131", "k12": "v132"} ]; const list2 = [ {"k21": "v211", "k22": "v212"}, {"k21": "v221", "k22": "v222"}, {"k21": "v231", "k22": "v232"} ]; const result = list1.map((obj, idx) => ({...obj, ...list2[idx]})); console.log(result);
输出结果:
[ { k11: 'v111', k12: 'v112', k21: 'v211', k22: 'v212' }, { k11: 'v121', k12: 'v122', k21: 'v221', k22: 'v222' }, { k11: 'v131', k12: 'v132', k21: 'v231', k22: 'v232' } ]
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

