对于任何有兴趣的人,我最终在此处构建了“带有过期的本地存储”脚本,http://plugins.jquery.com/project/localcache
我在做什么:构建存储扩展,以便用户可以这样做:
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 for value,如果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进行正则表达式检查,如果有,是否有人有方便的模式告诉我字符串是否真的是JSON.stringify对象?
谢谢!
答案 0 :(得分:3)
判断字符串是否为JSON的常用方法是通过JSON解码器运行它。如果成功,那就是JSON :-)这里不需要正则表达式。
答案 1 :(得分:2)
这样做时你需要什么样的速度? 如果它不是一个大问题,你总是可以尝试解析/解码val,如果失败,那么它不是JSON对象。
答案 2 :(得分:2)
另一种选择是存储对象{isJsonObj:true, jsonObj: jsonObj}
,并检查类型是否为Object,并且isJsonObj为true。如果其中任何一个都是假的,那么它不是json obj(这意味着你不必解析)。我意识到这意味着你不会总是有一个字符串,但它使测试变得容易,并且不会带来大量的开销。
答案 3 :(得分:0)
您要检查变量是否为字符串正确吗?
const obj = {"apple": 1, "banana": 2, "cat": 3}
const stringify_value = JSON.stringify(obj)
您可以尝试lodash isString
import isString from "lodash/isString"
if(isString(stringify_value)) {
// the value is stringify
}else{
// the value is not stringify
}