You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过ID匹配从三个JSON中提取字段生成新JSON?

用JS/jQuery实现多JSON列表按标识匹配合并

嘿,我来帮你搞定这个需求!既然你熟悉jQuery和JS,完全可以用原生JS(jQuery在这场景下其实没太多必要,不过如果你的数据是通过jQuery Ajax获取的,也能无缝衔接)来实现,思路其实很清晰,分三步走:

核心思路

  1. 预处理数据,提升匹配效率:因为是大型JSON列表,直接嵌套循环匹配会很慢,所以先把第二个和第三个列表转成「以article_id为键」的映射对象,这样后续查找只需要O(1)的时间。
  2. 遍历主列表,匹配合并:以第一个列表(用id作为唯一标识)为基础,遍历每个元素,通过id去映射对象里找对应的第二个、第三个列表的元素。
  3. 组装目标结构:把需要的字段从三个匹配到的元素中提取出来,拼成你想要的新JSON结构。

代码实现(带详细注释)

假设你已经通过接口或本地文件拿到了三个JSON字符串,先把它们解析成JS对象数组(如果是用jQuery的$.getJSON获取的,已经是解析好的对象了):

// 示例数据(实际替换成你的大型JSON数组)
const list1 = [
  { "id":"265", "title":"Battle of Gettysburg", "page_id":"4849", "language_id":"en", "original_time":"July 1–3, 1863" },
  // ...更多元素
];
const list2 = [
  { "id":"185", "original_name":"United States", "country_id":"24", "article_id":"265" },
  // ...更多元素
];
const list3 = [
  { "id":"73", "month":"July", "year":"1863", "suffix":"", "article_id":"265" },
  // ...更多元素
];

// 第一步:把list2转成article_id -> 元素的映射
const list2Map = list2.reduce((acc, current) => {
  acc[current.article_id] = current;
  return acc;
}, {});

// 同样处理list3
const list3Map = list3.reduce((acc, current) => {
  acc[current.article_id] = current;
  return acc;
}, {});

// 第二步:遍历list1,生成目标数组
const mergedResult = list1.map(item => {
  // 通过item.id匹配list2和list3的元素,没匹配到就用空对象避免报错
  const matchedList2Item = list2Map[item.id] || {};
  const matchedList3Item = list3Map[item.id] || {};

  // 组装你需要的结构
  return {
    id: item.id,
    title: item.title,
    original_name: matchedList2Item.original_name || '', // 可选:没匹配到给空字符串
    year: matchedList3Item.year || ''
  };
});

// 如果需要把结果转成JSON字符串,用下面的代码
const mergedJson = JSON.stringify(mergedResult, null, 2);
console.log(mergedJson);

补充说明

  • 性能优化:用reduce生成映射是关键,尤其是处理大型数组时,能把时间复杂度从O(n*m)降到O(n),避免页面卡顿。
  • 边界处理:代码里加了|| {}和|| '',是为了防止某个id在list2或list3中没有对应项时出现undefined,你可以根据实际需求调整默认值(比如改成null)。
  • jQuery适配:如果你的数据是通过$.getJSON获取的,只需要把获取到的数组赋值给list1、list2、list3即可,其他代码完全通用。

内容的提问来源于stack exchange,提问作者rob.m

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:04:11