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

如何解析两个JSON文件、按ID匹配合并数据后展示到UI界面

两个JSON文件按id合并并渲染到UI的实现方案

整体流程分三步:解析JSON、按id关联合并字段、渲染结果到页面,以最常见的前端Web场景为例,实现逻辑如下:

1. 解析JSON文件

首先把两个JSON文件的内容读取出来,转成可操作的对象。如果是前端环境,需要通过文件选择控件让用户上传两个JSON文件,用FileReader读取文件内容后,调用JSON.parse()转成JS数组即可;如果是Node.js/后端环境,直接读文件内容后用对应语言的JSON解析方法处理就行。

2. 按id做字段映射合并

不要用双层循环遍历两个数组匹配id(数据量稍大时性能很差),推荐先构建id为键的映射表,把时间复杂度降到O(n+m),参考实现代码:

// 解析得到的两个源数据数组
const productBaseList = [
  {
    "id": 11,
    "name": "Car"
  }
]
const productPriceList = [
  {
    "id": 11,
    "price": 50
  }
]

// 先构建id到价格的映射表
const priceMap = {}
productPriceList.forEach(priceItem => {
  // 注意如果存在重复id,后面的记录会覆盖前面的,有去重需求可以提前处理
  priceMap[priceItem.id] = priceItem.price
})

// 遍历基础产品列表,拼接价格字段
const mergedProductList = productBaseList.map(baseItem => {
  return {
    ...baseItem,
    // 匹配不到价格时给默认值,避免显示undefined
    price: priceMap[baseItem.id] ?? "暂无定价"
  }
})

其他语言的实现逻辑完全一致:把其中一个数组转成id为键的字典/哈希表,再遍历另一个数组取值拼接即可。

3. 把合并结果渲染到UI

拿到合并后的数组后,直接生成对应DOM插入页面即可,原生JS实现示例:
首先在页面预留展示容器:

<div id="product-show-area"></div>

然后写渲染逻辑:

const showArea = document.getElementById('product-show-area')
// 清空旧内容
showArea.innerHTML = ''

mergedProductList.forEach(product => {
  const productEl = document.createElement('div')
  productEl.style.border = "1px solid #eee"
  productEl.style.padding = "12px"
  productEl.style.margin = "8px 0"
  productEl.innerHTML = `
    <p>产品ID:${product.id}</p>
    <p>产品名称:${product.name}</p>
    <p>产品价格:${typeof product.price === 'number' ? `¥${product.price}` : product.price}</p>
  `
  showArea.appendChild(productEl)
})

注意事项

  • 浏览器环境受安全限制,不能直接读取本地磁盘的固定路径文件,必须通过文件选择控件由用户主动选择文件才能读取
  • 如果数据量超过10万条,建议分批渲染DOM,避免一次性插入大量节点导致页面卡顿
  • 如果两个JSON里存在同名字段(比如两个文件都有name字段),提前约定好保留哪一侧的字段值,避免合并时被覆盖

内容的提问来源于stack exchange,提问作者Nightfury

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:12:16