无法读取JSON属性:TypeError: Cannot read property 'timelineData' of undefined
哈哈,这个报错我太熟悉了!你这是踩了JavaScript里访问对象属性的经典坑——你试图读取timelineData的时候,它的上层对象(也就是JSON里的default对应的对象)是undefined,咱们一步步来解决:
先搞懂报错原因
报错TypeError: Cannot read property 'timelineData' of undefined翻译成大白话就是:你想读某个东西的timelineData属性,但这个“某个东西”根本不存在(是undefined)。对应你的JSON结构来说,就是你访问xxx.timelineData时,xxx不是你预期的那个包含timelineData的default对象。
一步步排查解决
1. 确认JSON已经被正确解析成JavaScript对象
如果你的JSON是从文件、网络请求或者其他地方获取的字符串,必须先把它转换成JS对象才能访问属性。举两个常见场景的正确写法:
浏览器端网络请求获取JSON
// 错误示例:直接用response,没解析成对象 fetch('your-data.json') .then(res => res) // 这里拿到的是Response对象,不是JSON对象 .then(data => console.log(data.default.timelineData)) // 必报错 // 正确做法:用res.json()解析 fetch('your-data.json') .then(res => res.json()) // 把响应转换成JS对象 .then(data => console.log(data.default.timelineData)) // 现在能正确访问了
Node.js读取本地JSON文件
const fs = require('fs'); fs.readFile('your-data.json', 'utf8', (err, rawData) => { if (err) { console.error('读取文件出错:', err); return; } const jsonObj = JSON.parse(rawData); // 把JSON字符串转成JS对象 console.log(jsonObj.default.timelineData); // 正确访问路径 });
2. 检查你的访问路径是否完全正确
你的JSON结构是外层有个default属性,里面才是timelineData数组,所以正确的访问路径是:
// 正确路径 jsonObj.default.timelineData // 错误路径(很多人会漏写default) jsonObj.timelineData // 这肯定会报错,因为外层根本没有timelineData属性
3. 给代码加个“安全防护”(可选但推荐)
如果不确定数据是否加载完成或者结构是否正确,可以用**可选链操作符(?.)**来避免报错,同时快速排查问题:
// 如果default或timelineData不存在,会返回undefined而不是抛错 console.log(data?.default?.timelineData);
如果你需要兼容老版本浏览器/Node.js,也可以用传统的判断方式:
if (data && data.default && data.default.timelineData) { console.log(data.default.timelineData); } else { console.log('数据未加载或路径错误'); }
4. 确认你的JSON文件本身是完整合法的
你贴的JSON内容最后是"formattedAxisTime": "Feb 2,...",看起来是被截断了。要确保整个JSON没有语法错误——可以直接在浏览器控制台里执行JSON.parse('你的完整JSON字符串'),如果报错,说明JSON本身有问题,得先修复JSON的格式错误。
最后总结
核心问题就是:要么JSON没被正确解析成JS对象,要么你访问属性的路径错了,要么JSON本身不完整。按上面的步骤排查,应该很快就能解决!
内容的提问来源于stack exchange,提问作者Hashim

