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

