【发布时间】:2013-10-18 16:14:15
【问题描述】:
问题
我的一些 json 数据出现解析错误,因为它包含单引号。 例如,我的一些数据可能如下所示:
“拉里的数据”
我已阅读以下文章: jQuery single quote in JSON response
我一直在尝试实施一些解决方案,但我无法摆脱我的解析错误。
代码
在我的模型中,我使用 lua 库将我的数据编码为 json。 该模型返回如下所示的数据:
[{\"createddatetime\":\"2013-09-10 17:56:55\",\"description\":\"John Doe\'s phone\",\"number\":\"72051\",\"createdname\":\"conversion script\",\"user\":\"23123\",\"position\":\"46\",\"id\":\"49\",\"user_id\":\"822\",\"password\":\"rwer234\"}]"
在我看来,我的代码目前看起来是这样的:
$.ajax({
url:myurl + '?startpos=' + page_index * items_per_page + '&numberofrecordstograb=' + items_per_page + '&viewtype=json',
success: function(data){
console.log('inside');
for(var i=0;i<data.length;i++) {
var deviceobj = data[i];
newcontent = newcontent + "<TR>";
newcontent=newcontent + '<TD>';
//add EDIT hyperlink
if ($("#editdevicesettings").val() == "true") {
var temp = $("#editlinkpath").val();
newcontent=newcontent + temp.replace("xxx",deviceobj["device_id"]) + ' ';
}
//add DELETE hyperlink
if ($("#deletedevice").val() == "true") {
var temp = $("#deletelinkpath").val();
newcontent=newcontent + temp.replace("xxx",deviceobj["device_id"]);
}
newcontent=newcontent + '</TD>';
newcontent=newcontent + '<TD>' + deviceobj["number"] +'</TD>';
newcontent=newcontent + '<<TD>' + deviceobj["user"] + '</TD>';
newcontent=newcontent + '<<TD>' + deviceobj["password"] + '</TD>';
if (deviceobj["name"]) {
newcontent=newcontent + '<TD>' + deviceobj["name"] + '</TD>';
}
else {
newcontent=newcontent + '<TD> </TD>';
}
newcontent=newcontent + '<TD>' + unescape(deviceobj["description"]) + '</TD>';
newcontent = newcontent + "</TR>";
}// end for
// Replace old content with new content
$('#Searchresult').html(newcontent);
}//end if
},
error: function(request, textStatus, errorThrown) {
console.log(textStatus);
console.log('========');
console.log(request);
},
complete: function(request, textStatus) { //for additional info
//alert(request.responseText);
console.log(textStatus);
}
});
但我仍然在此特定记录上遇到解析错误。
任何建议将不胜感激。 谢谢。
编辑 1
我改变了我的逻辑,当它失败时,它会在控制台中打印出“request.responseText”。这是它的样子:
"[{\"createddatetime\":\"2013-09-10 17:56:55\",\"description\":\"John Doe\'s phone\",\"number\":\"72051\",\"createdname\":\"conversion script\",\"user\":\"28567\",\"position\":\"46\",\"id\":\"49\",\"user_id\":\"822\",\"password\":\"rwer234\"}]"
撇号仍然被转义。
编辑 2
这是我的代码在服务器端(也就是模型中)的样子:
get_device_records = function(ajaxdata)
local results = list_devices(nil,false,ajaxdata.startpos, ajaxdata.numberofrecordstograb)
return results.value
end
【问题讨论】:
-
我认为你的 json 数据无效,jsonlint.com
-
是的。我已经尝试在 jsonlint 中进行测试,但我所有的 json 数据都失败了。我不知道为什么。但是浏览器能够解析所有内容......除了那些带有单引号的内容。我想知道为什么我的数据在 jsonlint 中失败。
-
你有
dataType: 'json'所以,不需要手动解析,jQuery会做,它是(数据)已经解析的对象,"也被转义了,它应该是不封顶的. -
您的示例显示模型返回的内容根本无效 - 在真正的 JSON 中,不应该这样转义常规双引号,所以我猜您是从某个调试器中提取的。使用 Fiddler 或您的浏览器开发工具查看实际的 AJAX 响应以获取原始响应。
-
Joe Enos,我正在使用 Chrome 的调试工具,在“网络”选项卡下,我可以看到每个 ajax 调用得到的所有响应。我所有的 json 数据看起来都一样,并且被正确解析......?我对 json 太陌生了,不知道它为什么/如何工作……但确实如此。唯一失败的是带单引号的。
标签: javascript jquery ajax json