localStorage 对象处理数组

Posted

技术标签:

【中文标题】localStorage 对象处理数组【英文标题】:localStorage array of objects handling 【发布时间】:2012-11-22 00:45:18 【问题描述】:

JSON 对象数组存储在 html5 中 localStorage。 现在分隔符是 ; 用于通过localStoragesplit(';')join(';') 操作访问和修改对象数组。

但是,分隔符方法看起来不稳定。 例如 ; 可能会在 objects 属性中遇到,split(';') 操作将不正确。

可以用;;作为分隔符,但我不确定它是否也稳定。

是否有任何可靠的方法来处理作为对象数组呈现的localStorage,至于localStorage 保存为String

编辑

其中一个障碍是对象数组无法像经典一样保存到 localStorage:"[,]"localStorage 自动将其转换为字符串,例如 ","

我在localStorage中的当前数据:

""name":"volvo","id":"033";"name":"saab","id":"034""

假设 也许,我可以在开头添加[,在结尾添加],但看起来并不优雅

【问题讨论】:

【参考方案1】:

只需将对象转换为 JSON 字符串:

localStorage.setItem("savedData", JSON.stringify(objects));

反之亦然:

objects = JSON.parse(localStorage.getItem("savedData")));

或者您可以在同一个 localStorage 值中添加多个对象:

localStorage.setItem("savedData", JSON.stringify([object1, object2 /*, etc*/]));
object1 = JSON.parse(localStorage.getItem("savedData"))[0];
object2 = JSON.parse(localStorage.getItem("savedData"))[1];

Here's the DOM storage specification.

您也可以像这样访问savedData

localStorage.savedData = "Hello world"
var foo = localStorage.savedData;

这可以用于获取和设置数据,但它被认为不如getItem('name');setItem('name', 'value');“安全”

【讨论】:

嗨,我已经在真空中使用 String 进行了测试,它可以正常工作,但是问题是 JSON 对象数组保存到 localStorage,由 , 大括号分隔,例如"obj1,obj2" 我期待 "[obj1,obj2]" 您可以将实际对象/数据编辑到您的问题中吗?现在,我不太确定您尝试保存的数据看起来如何。我很困惑,因为:JSON.stringify([a:1, b:2]); 返回:"["a":1,"b":2]",就像预期的那样。 我明白了。这不是一个有效的 JSON 字符串。您从哪里获得这些数据? 我使用TidyJSONWriter,com.day.cq.commons.TidyJSONWriter 从后端获取它 嗯,我明白了。最简单的做法是确保TidyJSONWriter 使用, 作为分隔符而不是;(如果可能),然后将其保存到您的localStorage 并添加[]localStorage.savedData = '['+data+']' 这有点丑但那么至少它可以被正确解析。【参考方案2】:

读取变量:

var xyz = JSON.parse( localStorage.getItem( 'element' ) );

存储变量:

localStorage.setItem( 'element' , JSON.stringify(xyz));

其中element是本地存储变量的名称,xyz是js变量的名称。

【讨论】:

以上是关于localStorage 对象处理数组的主要内容,如果未能解决你的问题,请参考以下文章

如何手动清除localStorage中的数据

localstorage

无法在 localStorage 的数组中推送对象

localStorage存储数组或者对象的问题总结

将 JSON 对象推送到 localStorage 中的数组

localStorage存储对象,sessionStorage存储数组对象