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

如何读取类JSON自定义格式?解析营业时间字段报错求助

解决formatted_opening_times解析与格式化展示问题

首先,你遇到的Uncaught SyntaxError是因为原始的formatted_opening_times根本不是合法的JSON格式——JSON要求所有键必须用双引号包裹,字符串值也要加双引号,键值对之间用逗号分隔,但你的数据里用了=>代替冒号,数字键没有引号,时间字符串也没加引号,还靠空格分隔键值对,JSON.parse自然无法识别这种非标准格式。

下面分两种最常见的情况给出解决方案:


情况1:formatted_opening_times是JavaScript对象(最可能的场景)

从你给出的原始数据来看,它更像是一个直接可访问的JS对象,而非字符串。这种情况下根本不需要JSON.parse,直接处理即可:

// 先定义数字和星期名称的对应关系(注意:这里的数字映射要和你的数据匹配,0对应周日,1对应周一,以此类推)
const dayNameMapping = {
  0: 'Sunday',
  1: 'Monday',
  2: 'Tuesday',
  3: 'Wednesday',
  4: 'Thursday',
  5: 'Friday',
  6: 'Saturday'
};

// 直接获取对象
const openingTimes = storeSpecs.data.formatted_opening_times;
let displayContent = '';

// 按星期顺序排序后遍历(可选,让输出更规整)
Object.keys(openingTimes)
  .sort((a, b) => parseInt(a) - parseInt(b))
  .forEach(dayNumber => {
    const dayName = dayNameMapping[dayNumber];
    // 每个键对应的值是数组,取第一个元素就是时间范围
    const timeRange = openingTimes[dayNumber][0];
    displayContent += `${dayName}: ${timeRange}<br>`;
  });

// 最后把displayContent插入到你需要展示的DOM元素中即可
// 比如:document.getElementById('opening-times').innerHTML = displayContent;

情况2:formatted_opening_times是原始字符串(从文件读取的非标准格式)

如果它是以非标准字符串形式存在的,那需要先把它转换成合法JSON,再解析:

// 假设原始字符串是你给出的格式
let rawOpeningTimesStr = storeSpecs.data.formatted_opening_times;

// 转换为合法JSON格式
const validJsonStr = rawOpeningTimesStr
  .replace(/=>/g, ':')          // 把=>替换为JSON标准的冒号
  .replace(/\[([0-9:-]+)\]/g, '["$1"]') // 给时间字符串加上双引号
  .replace(/(\d+):/g, '"$1":')  // 给数字键加上双引号
  .replace(/\s+(?=")/g, ', ');  // 把键值对之间的空格替换为逗号

// 现在可以正常解析了
const openingTimes = JSON.parse(validJsonStr);

// 之后的格式化步骤和情况1完全一致

这样处理后,你就能得到类似:

Monday: 09:00 - 22:00

Tuesday: 09:00 - 22:00

...

的展示效果了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:21:22