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

为何JSON.stringify()无法处理该数组?如何将其存入localStorage?

问题原因与解决方案

为什么会出现这个情况?

你虽然声明的是数组array = [],但实际上是在给这个数组对象添加字符串类型的属性(非数字索引)——数组本质上也是JS对象,所以你能给它加任意字符串键的属性,console.log也会把这些属性展示出来,但JSON序列化数组的时候,只会处理0、1、2...这类数字索引的元素,那些字符串键的属性会直接被忽略,这就是为什么JSON.stringify(array)得不到你想要的内容,自然也没法正常存入localStorage。

两种可行的解决办法

1. 改用普通对象存储(最推荐)

既然你的数据是键值对形式,直接用普通对象来存储才是更合适的选择,JSON能完美序列化这类结构:

// 声明普通对象
const dataObj = {};
// 添加键值对
dataObj["ChIJOaegwbTHwoARg7zN_9nq5Uc"] = "ChIJOaegwbTHwoARg7zN_9nq5Uc";
dataObj["ChIJXTwCdefHwoAR9Jr4-le12q4"] = "ChIJXTwCdefHwoAR9Jr4-le12q4";

// 序列化并存入localStorage
localStorage.setItem('savedData', JSON.stringify(dataObj));

// 后续读取的方式
const loadedData = JSON.parse(localStorage.getItem('savedData'));
// 可以直接通过键访问值
console.log(loadedData["ChIJOaegwbTHwoARg7zN_9nq5Uc"]);

2. 转成标准数组元素(如果必须用数组)

如果你坚持要用数组存储,可以把每个键值对包装成一个对象,作为数组的元素,这样JSON序列化就能正常识别了:

const array = [];
// 把键值对转成数组元素
array.push({
  key: "ChIJOaegwbTHwoARg7zN_9nq5Uc",
  value: "ChIJOaegwbTHwoARg7zN_9nq5Uc"
});
array.push({
  key: "ChIJXTwCdefHwoAR9Jr4-le12q4",
  value: "ChIJXTwCdefHwoAR9Jr4-le12q4"
});

// 序列化并存入
localStorage.setItem('savedData', JSON.stringify(array));

// 读取后如果需要快速通过键查找值,可以再转成对象
const loadedArray = JSON.parse(localStorage.getItem('savedData'));
const loadedObj = Object.fromEntries(loadedArray.map(item => [item.key, item.value]));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:16:37