javascript - jQuery 的 parseJSON 中的正则表达式测试返回 false - 为什么?

标签 javascript jquery regex json

我不明白为什么在 jQuery 的 parseJSON 函数中测试:

/^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
            .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
            .replace(/(?:^|:|,)(?:\s*\[)+/g, ""))

为字符串返回 false: {"TermTitle":"some Title"}
http://www.jsonlint.com/中的测试告诉我字符串 {"TermTitle":"some Title"} 是有效的 JSON,但是当我尝试将它传递给 $.parseJSON(opData) 时,parseJSON 函数失败...
我还在 Firebug 中使用提到的字符串单独测试了这个 /^[\],:{}\s]*$/.test... 函数。

[编辑] 好的,代码:

var json = '{"TermTitle":"some Title"}';  
var obj = $.parseJSON(json);  
alert('obj = ' + obj + ' and obj.TermTitle = ' + obj.TermTitle);

也适合我。

但在我的例子中,我的 JavaScript 中有以下内容:

function GetTerm($iInd) {  
    $.ajax({  
        type: "POST",  
        url: "get_term.php",  
        data: {  
            id: $iInd  
        },  
        success: function(data){  
            ProcessFetchedTerm(data);  
        }  
    });  
    //If I tried adding dataType: "json" then it would stop working at all.
}  

function ProcessFetchedTerm(opData) {  
    alert ("In ProcessFetchedTerm, data: '" + opData + "'");  
    alert ("typeof opData: " + typeof opData);  

    alert ("Replacement result of the regex function: " +  
      opData.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").  
          replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").  
          replace(/(?:^|:|,)(?:\s*\[)+/g, ''));  

    alert ("Result of the regex function: " +  
      /^[\],:{}\s]*$/.  
          test(opData.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").  
          replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").  
          replace(/(?:^|:|,)(?:\s*\[)+/g, '')));  

    var oTerm = $.parseJSON(opData);  
    alert('oTerm = ' + oTerm + ' and oTerm.TermTitle = ' + oTerm.TermTitle);  
}  

get_term.php 我有:

echo json_encode(  
    array(  
        "TermTitle"=>"some Title"  
    )  
);  

警报返回:
在 ProcessFetchedTerm 中,数据:'{"TermTitle":"some Title"}'
opData 类型:字符串
regex函数的替换结果:{]:]}
正则表达式函数的结果:false
未显示上次警报

[编辑 2]

我将函数 ProcessFetchedTerm 的开头重写为

function ProcessFetchedTerm(opData) {  

    var json = '{"TermTitle":"some Title"}';  
    alert ("In ProcessFetchedTerm, opData: '" + opData + "' json: '" + json + "'");  

    var oTerm = $.parseJSON(json);  

警报发出:

In ProcessFetchedTerm, opData: '{"TermTitle":"some Title"}' json: '{"TermTitle":"some Title"}'  

所以字符串是相等的,如果下一行是 var oTerm = $.parseJSON(json); 它可以工作,但如果下一行是 var oTerm = $.parseJSON(opData ); 它不起作用。

那么在这个(大概)字符串对象 opData 中隐藏了什么阻止它工作?

最佳答案

运行这段代码:

var json = '{"TermTitle":"some Title"}';
var obj = $.parseJSON(json);
alert('obj = ' + obj + ' and obj.TermTitle = ' + obj.TermTitle);

适用于我(使用 jQuery 1.4)。问题一定出在您的代码中的其他地方。当 parseJSON 方法失败时,您正在运行的确切代码是什么?

编辑(响应发布的代码): 你为什么要执行第三和第四警报的功能?我猜想这正在改变您的 opData 值。尝试在您的 parseJSON 调用之前添加您的第一个警报,看看它在那里。

关于javascript - jQuery 的 parseJSON 中的正则表达式测试返回 false - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2297186/

相关文章:

javascript - 如何一次只显示一个文本框并单击下一步显示下一个输入字段

javascript - POST 方法后清除所选值

javascript - 为tinyMCE全屏添加关闭按钮

regex - 在 Perl 正则表达式中转义特殊字符

javascript - 摆脱切换时的打嗝现象

javascript - 使用 Emacs 编辑 Googleplus 帖子

jquery - 如何解决 'cannot read property ' 0' of undefined'错误?

javascript - 一段时间后更改线性渐变背景

python - 使用正则表达式捕获子字符串 python

r - 在 xml2 中使用正则表达式?