$.parseJSON("1")
返回1
。我希望这会抛出一个错误,因为这似乎不是形式的有效JSON:
{
"firstName": "John"
}
为什么1
正确解析?无论如何都要让它反而引发错误。
答案 0 :(得分:13)
虽然1
不是有效的JSON对象,但它是有效的JSON编号。似乎$.parseJSON
解析所有JSON值,而不仅仅是对象。
答案 1 :(得分:13)
您可以使用parseInt()
更好地处理数字解析。它将在成功时返回一个数字,否则将返回NaN
(非数字)。
var a = parseInt('23');
isNan(a); // false
var b = parseInt('ab');
isNan(b); // true
如果你看一下jQuery方法的来源,它会很快变得清晰。
因此,如果在您的情况下执行步骤2.
,它将只返回1
,即使它不是真正的JSON。
<强>更新强>
我很好奇原生JSON.parse
would handle it如何做同样的事情(返回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 );
},
答案 2 :(得分:4)
parseJSON实际上只是从格式良好的json字符串返回javascript对象。 json格式不仅仅接受(关联)数组。它接受如下数据结构:
查看有关json的所有详细信息http://json.org/。
$ .parseJSON(“1”)实际读取有效的javascript编号1,结果为1
答案 3 :(得分:2)
1
不是有效的“JSON文本”,但无论如何大多数JSON解析器都接受它。并非所有人都这样做,就像你在jsonlint中找到的那样。
我发布了more complete explanation来自JSON RFC的信息以及Douglas Crockford对另一个问题的回应。
答案 4 :(得分:0)
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)
}