为何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
相关产品推荐
相关产品推荐

