如何区分字符串和 JSON [重复]
Posted
技术标签:
【中文标题】如何区分字符串和 JSON [重复]【英文标题】:How to differentiate between a String and JSON [duplicate] 【发布时间】:2015-07-02 15:34:09 【问题描述】:我使用 JSON 已经有一段时间了。
我知道 JSON 是 stringified
javascript 对象。
我也知道 JSON 是由什么构成的,如下面的帖子所述。
What is the difference between JSON and Object Literal Notation?
问题:但是,我想知道是否有 typeof
之类的方法可以告诉我给定字符串是 JSON 还是任何其他字符串。
到目前为止我观察到的情况:
1. var data = "name":"JS";
alert(typeof(data)); // object. Agree!
2. // I know this is JSON, by looking at the syntax
var data = '"name":"JS"';
alert(typeof(data)); // string.
3. // I know this is just any other string (NOT JSON), by looking at the syntax.
var data = "AnyOtherString";
alert(typeof(data)); // string
在 JavaScript 中有什么方法可以区分上面的 Point 2 和 Point 3。可能,类似于typeof
的东西会告诉我它只是一个字符串还是一个 JSON(也是一个字符串)。?
【问题讨论】:
试试这个问题 - ***.com/questions/10174898/… 这也可能有帮助 - ***.com/questions/3710204/… 【参考方案1】:要查看某个内容是否为 JSON:尝试将其解析为 JSON。
如果不是,JSON.parse
将抛出异常(您可以使用 try/catch
捕获)。
function isJSON(str)
try
JSON.parse(str);
return true;
catch (err)
return false;
alert(
isJSON('"name":"JS"') + " / " + isJSON("AnyOtherString")
);
【讨论】:
JSON.parse 是唯一的出路吗? 我想不出另一种理智的方法 我知道这是可以做到的。但不知何故,我觉得这是一种黑客攻击 使用正则表达式 - ***.com/questions/3710204/… 我不会把一堆乱七八糟的正则表达式称为解决问题的理智方法;)【参考方案2】:这在大字符串下可能不会很快,但这是唯一可靠的方法:
function isJson(a)
try
JSON.parse(response);
return true;
catch(e)
return false;
如果您遇到大字符串,将它们解析为 JSON 可能会很麻烦,那么您可以使用基本验证,例如搜索“:
”、“”、“
”,这可能会拒绝一些开始时的字符串,在进入真正的验证之前。
Here 是一些通过正则表达式解决它的帖子:
【讨论】:
【参考方案3】:不,JSON 只是一个字符串。您唯一能做的就是尝试将字符串解码为 JSON。如果成功,我想它是 JSON。如果没有,那就不是。
但是,您首先需要猜测,这似乎令人担忧。如果您不知道您拥有哪些数据,您如何高效地使用它?您的应用程序应该对它在任何时候保存的数据有一定的期望,并且需要满足这些期望。否则,您将无法编写任何可靠的算法来处理该数据。你应该知道你有 JSON 或者你没有。
【讨论】:
同意..我不是在猜测。但我想知道 JavaScript 是否有一些可以区分的东西。 a) 不,它不能,因为 b) 它不应该这样做。 :o)以上是关于如何区分字符串和 JSON [重复]的主要内容,如果未能解决你的问题,请参考以下文章
python中json文件处理涉及的四个函数json.dumps()和json.loads()json.dump()和json.load()的区分