Javascript jQuery'中的正则表达式测试;解析JSON返回false-为什么?
我不明白为什么要在jQuery的parseJSON函数中进行测试:Javascript jQuery'中的正则表达式测试;解析JSON返回false-为什么?,javascript,jquery,regex,json,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,
/^[\],:{}\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”:“某些标题”}
中的测试告诉我字符串
{“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”}”
操作数据类型:字符串
正则表达式函数的替换结果:{]:]}
正则表达式函数的结果: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);
适合我(使用jquery1.4)。问题一定在代码的其他地方。当parseJSON方法失败时,您正在运行的确切代码是什么
编辑(对发布代码的响应):
为什么要使用第三和第四警报的功能?我猜这会改变你的opData
值。尝试在调用parseJSON
之前添加第一个警报,并查看其内容。它返回“false”,因为它不匹配。“replace”调用将该JSON字符串转换为与正则表达式不匹配的“{]:]}”
[编辑]哦,是的,它确实匹配;我不知道你有什么问题。为什么您认为它会返回“false”?ProcessFetchedTerm输出中的警报是什么?添加了警报输出以解决问题…还有一些事情需要尝试:警报(opData==json)代码>。我认为这是错误的,因为他们似乎不平等。另外,尝试替换$.parseJSON(opData)代码>使用eval(opData)
。这应该做同样的事情,如果它能工作,那就意味着jQuery有问题。要进行eval测试,您必须这样做:eval(“(“+opData+”)”)
Yes witheval
它能工作。而警报(opData==json)
返回false。我仍将努力找出为什么正则表达式没有按预期工作……我也在考虑这个问题(移动第三和第四警报)。但它还是失败了。parseJSON
函数抛出无效的JSON:{“TermTitle”:“some Title”}“
错误。我还尝试将“您的”代码添加到同一个函数ProcessFetchedTerm
中,它可以工作,但是使用opData
中的值,它就不工作了。也许这可能与编码问题有关…?我想可能是编码问题,但我不知道会是什么。当您收到“Invalid JSON”
错误时,我会尝试调试它,并尝试查找我的代码中JSON
变量的值与代码中opData
的值之间的差异。。。