我认为,这是从一个有效的JSON.parse上一个数字作为一个字符串不会引发错误
function isValidJson(s) {
try {
JSON.parse(s);
return true;
} catch (e) {
return false;
}
}
console.log(isValidJson(1234)); // true
console.log(isValidJson('1234')); // true
console.log(isValidJson('Is life a valid JSON?')); // false :(
console.log(isValidJson('{"a" : { "b": [1, 2, 3] }}')); // true
这是我看到的最常见的答案,关于实现区别。我似乎不太明白这里发生了什么。这段代码实际上将数字和数字识别为字符串作为有效的JSON对象。任何人都可以点亮为什么/如何发生这种情况?
此外,在阅读MDN docs for JSON.parse,我发现齐磊方法。我写了一个似乎适用于所有场景的函数。这个函数实际上是否正确?
function isValidJson(s) {
try {
JSON.parse(s, function(k, v) {
if (k === "" && typeof v === "number") {
throw "Invalid JSON";
}
return v;
});
return true;
} catch (e) {
return false;
}
}
console.log(isValidJson(1234)); // false
console.log(isValidJson('1234')); // false
console.log(isValidJson('Is life a valid JSON?')); // false :(
console.log(isValidJson('{"a" : { "b": [1, 2, 3] }}')); // true
[编辑]我可能会错误地暗示,我在寻找区分有效的JSON字符串。我的意思是,有效的作为字符串的JSON对象。就此编辑这个问题。
你认为数组是对象吗? Javascript不会,但JSON不会。那么null呢? – RemcoGerlich
是的。我需要'[]'以及'{}'才能被视为有效。 null不应该被认为是有效的,我想我的解决方案不认为是空的。我可以改变这一点。我更倾向于理解JSON.parse在传入数字或数字字符串时不会抛出异常。 –
你的第一个函数不会抛出异常,因为数字字符串很好JSON,你的第二个函数事实上会在你的if中抛出“无效的JSON”异常,因为那个返回'1234'的假。所以我不明白你的意见。 – RemcoGerlich