我用它来测试服务器返回的数据是否为json。
try {
json = $.parseJSON(resp);
} catch (error) {
json = null;
}
if (json) {
//
} else {
//
}
但如果resp是一个数字2或3或者......如果resp为0,则返回null。
任何想法如何避免这种错误情况?
我正在使用php输出数据:
echo 0; //returns null
echo 2; //returns as valid json
看来,0读作字符串,2读作数字。
答案 0 :(得分:2)
如果您期望整数,请使用parseInt
:
try {
val = parseInt(resp, 10);
if(val > 0) /* act accordingly ... */
} catch (error) {
val = null;
}
如果您想知道“JSON是否有效”,您可以使用类似于以下内容的内容:
function isValidJSON(string){
try {
$.parseJSON(string);
return true;
}
catch(e){ return false; }
}
答案 1 :(得分:1)
我建议像:
// source from Angular source
function isJson(data) {
return (/^\s*[\[\{]/.test(data) && /[\}\]]\s*$/.test(data));
};
因此...
if (isJson(resp))
json = $.parseJSON(resp);
else
alert ('another response: ' + resp);
答案 2 :(得分:0)
2
或3
等数字在技术上是有效的JSON数据。你期待一个对象吗?参见例如this SO post用于检查返回的变量是否为对象的方法。
基本上你的工作流程是尝试将其解析为JSON,如果成功,检查它是否是一个对象/列表(取决于你的期望)。
示例:
try {
json = $.parseJSON(resp);
return (typeof(json) === "object")
} catch (error) {
json = null;
}