我認爲,這是從一個有效的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