如何合并现有JSON数组中的多个JSON对象?
合并JSON数组中重复对象的解决方案
嘿,我来帮你搞定这个JSON数组合并的问题!从你给出的数组来看,里面存在多个重复QuestionKey的对象(比如两个WarrantyGuarantee、两个RewardLoyalty),咱们可以通过按QuestionKey去重合并的方式来整理这个数组,下面用JavaScript来演示最常用的实现方法:
方案1:按QuestionKey去重,保留重复项的内容
如果重复的对象内容完全一致(像你例子里的情况),我们可以直接用reduce方法遍历数组,以QuestionKey作为唯一标识来合并对象:
// 你的原始JSON数组 const originalArr = [ { "WarrantyGuarantee":{ "Row Id":"RA048", "QuestionKey":"WarrantyGuarantee", "Answer":"Y" } }, { "RewardLoyalty":{ "Row Id":"RA051", "QuestionKey":"RewardLoyalty", "Answer":"Y" } }, { "WarrantyGuarantee":{ "Row Id":"RA048", "QuestionKey":"WarrantyGuarantee", "Answer":"Y" } }, { "RewardLoyalty":{ "Row Id":"RA051", "QuestionKey":"RewardLoyalty", "Answer":"Y" } }, { "MinCost":{ "Row Id":"RA044", "QuestionKey":"MinCost", "Answer":"hgf" } } ]; // 合并去重逻辑 const mergedArr = Object.values(originalArr.reduce((acc, currentItem) => { // 提取每个元素中嵌套的实际对象(因为每个元素是单键对象) const targetObj = Object.values(currentItem)[0]; // 用QuestionKey作为键,将对象存入累加器,重复的会自动覆盖 acc[targetObj.QuestionKey] = targetObj; return acc; }, {})); console.log(mergedArr);
合并后的结果
[ { "Row Id": "RA048", "QuestionKey": "WarrantyGuarantee", "Answer": "Y" }, { "Row Id": "RA051", "QuestionKey": "RewardLoyalty", "Answer": "Y" }, { "Row Id": "RA044", "QuestionKey": "MinCost", "Answer": "hgf" } ]
方案2:合并重复QuestionKey的不同值(比如Answer数组)
如果同一个QuestionKey对应的Answer不同,想要把这些值合并成数组,可以修改逻辑如下:
const mergedWithCombinedAnswers = Object.values(originalArr.reduce((acc, currentItem) => { const targetObj = Object.values(currentItem)[0]; if (!acc[targetObj.QuestionKey]) { // 第一次遇到该QuestionKey,初始化Answer为数组 acc[targetObj.QuestionKey] = { ...targetObj, Answer: [targetObj.Answer] }; } else { // 已存在该QuestionKey,将新的Answer加入数组 acc[targetObj.QuestionKey].Answer.push(targetObj.Answer); } return acc; }, {})); console.log(mergedWithCombinedAnswers);
这种方案的结果示例(假设原数组有不同Answer)
如果原数组里有一个WarrantyGuarantee的Answer是"N",合并后会变成:
[ { "Row Id": "RA048", "QuestionKey": "WarrantyGuarantee", "Answer": ["Y", "N"] }, // ...其他对象 ]
内容的提问来源于stack exchange,提问作者payal garg
相关产品推荐
相关产品推荐

