如何判断字符串是否是字符串化的JSON对象

时间:2011-11-21 00:24:00

标签: javascript jquery json local-storage

对于任何有兴趣的人,我最终在此处构建了“带有过期的本地存储”脚本,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对象?

谢谢!

4 个答案:

答案 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   
}