如何辨别字符串是一个stringify'd JSON对象

Ian*_*vis 5 javascript jquery json local-storage

对于任何有兴趣的人,我最终在这里构建了一个"localstorage with expirations"脚本,http: //plugins.jquery.com/project/localcache

我在做什么:构建存储扩展,以便用户可以这样做:

localStorage.setThing(key, value)
Run Code Online (Sandbox Code Playgroud)

用户可以执行以下操作:

localStorage.setThing("key1", 1)
localStorage.setThing("key2", "this is a string")
localStorage.setThing("key3", { prop1: "this is a json obj" })
Run Code Online (Sandbox Code Playgroud)

在我的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)
Run Code Online (Sandbox Code Playgroud)

我是否需要对val进行正则表达式检查,如果有的话,是否有人有方便的模式告诉我字符串是否真的是JSON.stringify对象?

谢谢!

Rod*_*own 2

另一种选择是存储一个 object {isJsonObj:true, jsonObj: jsonObj},并检查类型是否为 Object,并且 isJsonObj 是否为 true。如果其中任何一个为 false,则它不是 json obj(这意味着您不必解析)。我意识到这意味着你不会总是有一个字符串在那里,但它使测试变得容易,并且不会带来大量的开销。