localStorage 对象处理数组
Posted
技术标签:
【中文标题】localStorage 对象处理数组【英文标题】:localStorage array of objects handling 【发布时间】:2012-11-22 00:45:18 【问题描述】:JSON 对象数组存储在 html5 中 localStorage
。
现在分隔符是 ;
用于通过localStorage
、split(';')
和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 对象处理数组的主要内容,如果未能解决你的问题,请参考以下文章