对于任何有兴趣的人来说,我最终在这里构建了一个“带呼气的本地存储”脚本,
我正在做的事情:为存储构建一个扩展,以便用户可以这样做:
localStorage.setThing(key, value)用户可以执行以下操作:
localStorage.setThing("key1", 1)
localStorage.setThing("key2", "this is a string")
localStorage.setThing("key3", { prop1: "this is a json obj" })在我的setThing方法中,我正在检查类型的值,如果是typeof value == "object",则将其存储为localStorage.setItem(key, JSON.stringify(value))
在getThing方法中,我知道使其成为localStorage的值总是一个字符串。那我该怎么做呢?
var val = localStorage.getItem("key3")
if (val is a previously JSON.stringify'd object) // <-- ??
return JSON.parse(val)我是否需要对val执行regex检查,如果需要,是否有现成的模式可以告诉我字符串是否真的是JSON.strgify‘d对象?
谢谢!
发布于 2011-11-21 00:29:52
另一个选项是存储对象{isJsonObj:true, jsonObj: jsonObj},并检查类型为Object,isJsonObj为true。如果其中任何一个都是假的,那么它就不是json (这意味着您不必解析)。我意识到这意味着你不会总是有一个字符串在那里,但它使它很容易测试,不会携带大量的开销。
发布于 2011-11-21 00:29:23
判断字符串是否为JSON的通常方法是通过JSON解码器运行它。如果它成功了,它就是JSON :-)这里不需要正则表达式。
发布于 2011-11-21 00:28:23
你这样做需要什么样的速度?如果这不是一个大问题,您可以一直尝试解析/解码val,如果它失败了,那么它就不是JSON对象。
https://stackoverflow.com/questions/8205993
复制相似问题