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

向localStorage存入JSON时转义符丢失,解析报错如何解决?

解决localStorage存储JSON时转义符丢失导致解析失败的问题

我太懂这个坑了——手动加了转义符存进localStorage,结果转义符凭空消失,JSON.parse直接报错。其实问题出在你手动构造JSON字符串的方式上,JavaScript的字符串字面量会先解析掉转义符,等存到localStorage时,\早就没了。

正确姿势:用JSON.stringify()自动处理转义,别手动折腾

你完全不用自己写带转义的字符串,正确流程应该是:先定义要存储的JavaScript对象,再用JSON.stringify()把它转换成标准的JSON字符串,最后存入localStorage。转义的事儿交给内置函数处理,省心又不出错。

举个实际可用的例子:

// 先定义你要存储的原始数据对象
const userData = ["~#iM", ["loading", false, "auth"]];
// 用JSON.stringify自动转成合法的JSON字符串
const jsonString = JSON.stringify(userData);
// 存入localStorage
localStorage.setItem("users", jsonString);

这样存进去的内容是["~#iM",["loading",false,"auth"]](没有多余的外层引号,内部格式完全符合JSON规范),之后你用JSON.parse(localStorage.getItem("users"))就能直接解析出原对象,不会再报转义相关的错误。

为啥你原来的代码不行?

看你写的存入代码:

localStorage.setItem( "users", `"[\"~#iM\",[\"loading\",false,\"auth\"]]"` );

这里外层双引号里的\"会被JavaScript先解析成普通的",所以实际存进localStorage的内容是"["~#iM",["loading",false,"auth"]]"——这是一个被额外引号包裹的字符串,内部的引号没有转义,结构根本不是合法的JSON,自然解析失败。

而你测试的JSON.parse("[\"~#iM\",[\"loading\",false,\"auth\"]]")能成功,是因为这个字符串在JavaScript里被解析后,实际传给JSON.parse的是["~#iM",["loading",false,"auth"]],这才是标准的JSON格式。

最后再划个重点

  • 存数据:JS对象 → JSON.stringify() → 存入localStorage
  • 取数据:从localStorage取字符串 → JSON.parse() → JS对象
  • 永远别手动写JSON字符串,转义、格式这些细节交给内置API处理就好

内容的提问来源于stack exchange,提问作者alo gon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:11:31