Google Charts含new Date()的数据源触发JSON.parse报错问题
问题结论
该问题不属于官方文档疏漏,是对文档说明适用场景的误解导致的。
核心原因
标准JSON语法本身不支持new Date()这类JavaScript表达式/构造函数写法,仅支持null、布尔值、数字、字符串、数组、纯对象六种数据类型。
官方文档提到的new Date()可作为datetime类型值,仅适用于前端JavaScript代码中直接构造DataTable时传入Date实例的场景,并不要求远程JSON数据源直接包含new Date()字符串。你触发JSON.parse语法错误的直接原因,就是远程返回的JSON文件里写入了不符合JSON规范的new Date()字符串。
修复方案
- 调整远程数据源格式:不要返回
new Date(xxx)字符串,统一返回可序列化的时间格式,优先选择Unix毫秒级时间戳(数字类型)或者ISO 8601规范的时间字符串(比如"2024-06-15T14:30:00Z")。 - 前端解析完JSON后手动转换日期:在将数据传入Google Charts构造DataTable之前,遍历数据把时间字段转为Date实例即可,示例代码如下:
// 示例:远程返回的原始数据结构为[[时间戳, 访问量, 转化量], ...] const rawChartData = await fetch('/your-data-source').then(res => res.json()); const processedData = rawChartData.map(row => [ new Date(row[0]), // 手动转换为Date实例 row[1], row[2] ]); // 后续正常将processedData传入Google Charts接口即可
- 仅内网可信场景下可选用替代方案:如果无法调整数据源格式,可以不用
JSON.parse解析,改用eval()或者new Function()解析数据源内容,该方案存在XSS安全风险,公网场景禁止使用。
内容的提问来源于stack exchange,提问作者Cagy79
相关产品推荐
相关产品推荐

