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

如何通过Fetch API获取并渲染这份JSON菜单数据?

问题解决:Fetch渲染JSON数据显示[object object]及深层访问报错

核心结论

既不需要更换Fetch获取方式,也不需要修改JSON文件,问题出在数据层级解析和DOM渲染的处理逻辑上。

问题根源分析

你的JSON最外层是一个数组([{...}]),数组内仅包含一个分类对象,这个对象的键是菜单分类(Pizza、Pasta等),值是对应菜品的数组。之前的错误大概率是:

  1. 直接操作最外层数组而非内部的分类对象,导致访问data.Pizza时报错
  2. 直接将对象插入DOM,而非提取对象的具体属性(title、photo),所以显示[object Object]

完整解决代码示例

先准备HTML容器

<!-- 分类菜单容器 -->
<div id="category-menu"></div>
<!-- 菜品展示容器 -->
<div id="items-container"></div>

Fetch数据处理+渲染代码

fetch('./你的JSON文件路径.json')
  .then(res => {
    if (!res.ok) throw new Error('菜单数据加载失败');
    return res.json();
  })
  .then(rawData => {
    // 取出数组中的分类对象(因为JSON最外层是数组)
    const menuData = rawData[0];
    const menuContainer = document.getElementById('category-menu');
    const itemsContainer = document.getElementById('items-container');

    // 生成分类菜单按钮
    for (const categoryName of Object.keys(menuData)) {
      const categoryBtn = document.createElement('button');
      categoryBtn.textContent = categoryName;
      // 点击按钮切换对应分类的菜品
      categoryBtn.addEventListener('click', () => showCategoryItems(menuData[categoryName]));
      menuContainer.appendChild(categoryBtn);
    }

    // 默认加载第一个分类的菜品
    const firstCategory = Object.keys(menuData)[0];
    showCategoryItems(menuData[firstCategory]);
  })
  .catch(err => console.error(err));

// 渲染分类下的菜品
function showCategoryItems(itemsList) {
  const itemsContainer = document.getElementById('items-container');
  // 清空之前的菜品内容
  itemsContainer.innerHTML = '';
  itemsList.forEach(item => {
    const itemCard = document.createElement('div');
    // 提取item的title和photo属性来渲染,而非直接插入对象
    itemCard.innerHTML = `
      <h3>${item.title}</h3>
      <img src="${item.photo}" alt="菜品:${item.title}">
    `;
    itemsContainer.appendChild(itemCard);
  });
}

关键注意事项

  • 层级解析:必须先取rawData[0]拿到分类对象,再通过分类名(如menuData.Pizza)访问对应菜品数组
  • 属性提取:渲染时一定要用对象的具体属性(item.title、item.photo),不能直接把item或menuData插入DOM
  • 遍历对象:用Object.keys(menuData)获取所有分类名,再遍历生成菜单

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 08:06:17