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

ReactJS中map函数因JSON解析错误无法运行问题咨询(附JSON示例)

解决React中map函数因JSON解析错误无法工作的问题

嘿,你的问题根源很明确——提供的JSON存在语法不完整和拼写错误,导致React没法正确解析这个对象,map函数自然也就没法正常遍历数组了。咱们一步步来搞定它:

第一步:修复JSON的语法错误

先看你给出的JSON,有几个明显的问题:

  • categoreis是拼写错误,正确应该是categories
  • 末尾的form数组没写完,type...是不完整的,而且整个JSON的括号、数组都没闭合完全

我帮你整理了完整合法的JSON(你可以根据实际需求调整form里的type值):

{
  "id": 1,
  "name": "Save the Queen - Corporate Carrom Tournament - 2018",
  "date": "28 may 2018",
  "address": "Active Arena, Opposite Prestige Tech Park (Behind Croma) Outer Ring Road, Marathahalli, Kadubeesanahalli, Panathur,, Bengaluru, Karnataka 560103",
  "banner": "https://preview.ibb.co/fTSnKn/badminton_blr.jpg",
  "sports": [
    {
      "name": "Badminton",
      "categories": [
        {
          "name": "Men Singles",
          "fee": "600",
          "gst": "108",
          "formid": 102,
          "form": [
            {
              "label": "Name:",
              "paramname": "name",
              "type": "text"
            }
          ]
        }
      ]
    }
  ]
}

第二步:在React中正确使用map遍历数组

假设你已经把修复后的JSON解析成了合法的JavaScript对象(如果是从API获取的,记得用JSON.parse(),最好包个try-catch避免崩溃),下面是一个完整的组件示例:

import React from 'react';

const TournamentPage = () => {
  // 这里可以是从状态、props或者API获取的解析后的数据
  const tournament = {
    // 上面修复后的完整JSON内容
  };

  return (
    <div className="tournament-wrapper">
      <h1>{tournament.name}</h1>
      <p className="tournament-date">举办日期:{tournament.date}</p>
      <p className="tournament-address">地址:{tournament.address}</p>
      
      <h2>赛事项目</h2>
      {/* 遍历sports数组,记得给每个元素加唯一key */}
      {tournament.sports.map((sport, idx) => (
        <div key={idx} className="sport-card">
          <h3>{sport.name}</h3>
          
          <h4>参赛组别</h4>
          {/* 遍历该项目下的categories数组 */}
          {sport.categories.map((category, catIdx) => (
            <div key={catIdx} className="category-section">
              <p>
                {category.name} | 报名费:₹{category.fee}(含GST ₹{category.gst})
              </p>
              
              <h5>报名表单字段</h5>
              {/* 遍历表单字段数组 */}
              {category.form.map((field, fieldIdx) => (
                <div key={fieldIdx} className="form-field">
                  <label>{field.label}</label>
                  <input type={field.type} name={field.paramname} />
                </div>
              ))}
            </div>
          ))}
        </div>
      ))}
    </div>
  );
};

export default TournamentPage;

额外的避坑提示

  1. 校验JSON合法性:如果你的JSON来自外部API,先找个JSON校验工具确认格式没问题,避免因为后端返回的JSON有语法错误导致前端崩溃
  2. 安全解析JSON:用JSON.parse()的时候一定要包try-catch,防止解析失败影响整个组件:
let tournamentData = {};
try {
  // yourRawJsonString是从API拿到的原始字符串
  tournamentData = JSON.parse(yourRawJsonString);
} catch (err) {
  console.error("JSON解析出错啦:", err);
  // 这里可以设置默认数据或者显示错误提示给用户
}
  1. 防止数组未定义:在使用map之前,确保数组存在,比如用可选链操作符tournament.sports?.map(...),这样即使数据还没加载完成,也不会抛出错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:28:25