$.parseJSON("1")
返回1
。我希望这会引发错误,因为这看起来不像是有效的 JSON 格式:
{
"firstName": "John"
}
为什么1
解析正确?反正有没有让这个抛出一个错误。
虽然1
不是有效的 JSON 对象,但它是有效的 JSON 编号。似乎$.parseJSON
解析了所有 JSON 值,而不仅仅是对象。
您可以使用 更好地处理数字解析parseInt()
。成功时它将返回一个数字,否则返回NaN
(不是数字)。
var a = parseInt('23');
isNan(a); // false
var b = parseInt('ab');
isNan(b); // true
如果您查看 jQuery 方法的源代码,它会很快变得清晰。
因此,如果在您的情况下执行步骤,即使它不是真正的 JSON,2.
它也会简单地返回。1
更新:
我很好奇本地人如何JSON.parse
处理它并且它做同样的事情(返回1
)。因此,无论实施如何,您总是会得到相同的结果。
展出的图书馆: http: //code.jquery.com/jquery-1.8.3.js
parseJSON: function( data ) {
if ( !data || typeof data !== "string") {
return null;
}
// Make sure leading/trailing whitespace is removed (IE can't handle it)
data = jQuery.trim( data );
// Attempt to parse using the native JSON parser first
if ( window.JSON && window.JSON.parse ) {
return window.JSON.parse( data );
}
// Make sure the incoming data is actual JSON
// Logic borrowed from http://json.org/json2.js
if ( rvalidchars.test( data.replace( rvalidescape, "@" )
.replace( rvalidtokens, "]" )
.replace( rvalidbraces, "")) ) {
return ( new Function( "return " + data ) )(); // Just returns JSON data.
}
jQuery.error( "Invalid JSON: " + data );
},
parseJSON 实际上只是从格式良好的 json 字符串返回 javascript 对象。json 格式不仅接受(关联)数组。它接受以下数据结构:
有关 json 的所有详细信息,请查看http://json.org/。
$.parseJSON("1") 实际上读取了一个有效的javascript数字1,结果为1
1
不是有效的“JSON 文本”,但大多数 JSON 解析器都接受它。正如您在 jsonlint 中发现的那样,并非所有人都这样做。
我发布了一个更完整的解释,其中包含来自 JSON RFC 的信息以及 Douglas Crockford 的意见,以回应另一个问题。
try {
// JSON.parse accepts numbers but we do not want to do that
if (!isNaN(parseInt(inputState))) {
throw "Invalid JSON.";
}
// there we have valid JSON without number
let validJSON = JSON.parse(inputState);
} catch (error) {
console.log(error)
}