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

为什么JSON.parse执行时返回undefined,解析失败原因是什么?

JSON.parse解析失败原因分析

核心原因

待解析的JSON字符串格式非法,外层多了一对多余的双引号包裹。你提供的待解析内容为:

"{"eventId":"program-1","eventTimesSelected":{"243759548768171":"2021-11-30T23:00:00Z"}}"

首尾的双引号不属于合法JSON的组成部分,JSON.parse解析时会将首个双引号识别为字符串类型的起始标识,后续的{不符合JSON字符串语法规则,直接触发语法错误,导致解析失败返回undefined。

其他排除项

如果是localStorage中不存在startPaymentIn对应的键值,getItem会返回null,JSON.parse(null)的执行结果是null,不会返回undefined,因此该情况可以排除。

问题根因溯源

出现该问题通常是存储逻辑错误:往localStorage存储数据时,对JSON.stringify()的返回结果做了额外的转义、手动添加了引号、或者重复调用了JSON.stringify(),导致存入的内容多了一层包裹。

解决方案

  1. 优先修正存储逻辑:往localStorage存值时直接传入JSON.stringify(目标数据对象)的返回值即可,不要做额外的字符串处理,正确存储示例:
const targetData = {
  eventId:"program-1",
  eventTimesSelected:{"243759548768171":"2021-11-30T23:00:00Z"}
};
// 直接存储JSON.stringify的返回结果即可
localStorage.setItem("startPaymentIn", JSON.stringify(targetData));
  1. 若暂时无法修改上游存储逻辑,可以先对取出的字符串做清洗,移除首尾多余的双引号后再解析:
const startPaymentIn2 = localStorage.getItem("startPaymentIn");
// 正则移除首尾的双引号
const cleanedJsonStr = startPaymentIn2.replace(/^"|"$/g, '');
let startPaymentIn3 = JSON.parse(cleanedJsonStr);

内容的提问来源于stack exchange,提问作者János

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:36:03