$ .parseJSON(RESP);如果resp是数字,它的工作原理

时间:2013-12-23 16:22:25

标签: javascript jquery json

我用它来测试服务器返回的数据是否为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读作数字。

3 个答案:

答案 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)

23等数字在技术上是有效的JSON数据。你期待一个对象吗?参见例如this SO post用于检查返回的变量是否为对象的方法。

基本上你的工作流程是尝试将其解析为JSON,如果成功,检查它是否是一个对象/列表(取决于你的期望)。

示例:

try {
    json = $.parseJSON(resp);
    return (typeof(json) === "object")
} catch (error) {
    json = null;
}