据我所知,我收到一个解析器错误,因为我返回的一些数据包含撇号。
错误我得到了
SyntaxError:在jQuery.parseJSON上的Object.parse(native)输入的意外结束...
我的javascript:
var viewModel = kendo.observable({
hospitalDataSource: new kendo.data.DataSource({
transport: {
read: {
url: "/Hospital/GetHospitals",
dataType: "json",
type: "GET"
},
schema: {
model: {
id: "Id",
fields: {
ProviderId: { type: "number" },
Name: { type: "string" },
Active: { type: "string" }
}
}
},
errors: "errorMsg"
},
pageSize: 10,
error: function (e) {
toastr.options = {
"positionClass": "toast-bottom-full-width"
};
toastr.error('There was an error:' + e.errors, 'Uh Oh!');
this.cancelChanges();
},
serverPaging: false,
serverFiltering: false,
serverSorting: false
}),
})
控制器JsonResult:
[HttpGet]
public JsonResult GetHospitals()
{
var hospitals = hospitalService.GetAllHospitals();
return Json(hospitals, JsonRequestBehavior.AllowGet);
}
正如我上面提到的,我相信我得到了解析器错误,因为我的一些数据包含撇号。
例如,Name
可能包含字符串Women and Children's Hospital
我还是MVC / C#和Json的新手,所以我不确定如何解决这个问题。有没有办法逃脱所有的撇号?或者我还应该做些什么。
如果我说的话不清楚,请告诉我。谢谢!
答案 0 :(得分:1)
感谢用户戳,我能够解决此问题。它最终不是撇号的问题,而是我试图返回的JSON结果比MVC默认设置的最大值更长。
我能够使用这个答案来解决我的问题:Can I set an unlimited length for maxJsonLength in web.config?
答案 1 :(得分:0)
您需要先使用>>> from collections import Counter
>>> Counter(alist)
Counter({7: 2, 1: 1, 2: 1, 5: 1, 6: 1, 9: 1})
来转义这些撇号。用[{1}}
str.Replace("'", "\\'")
的出现次数
答案 2 :(得分:0)
我不认为问题与撇号有关,因为json序列化程序应该在需要时将它们转义。无论如何,在序列化对象的集合之前,更好地替换它们。
[HttpGet]
public JsonResult GetHospitals()
{
var hospitals = hospitalService.GetAllHospitals();
// Replaces the apostrophes from the hospital name
foreach(var hospital in hospitals) {
hospital.Name = hospital.Name.Replace("'", "");
}
return Json(hospitals, JsonRequestBehavior.AllowGet);
}
这样,JSON将在名称上没有aphostrophes的情况下返回。
答案 3 :(得分:0)
您可以尝试在撇号上使用html编码,这应该将它们转换为'
通常这是JSON.parse()
调用或依赖它的任何函数的问题,因为它不会转义撇号或引号。但是,HTML实体应该没问题。
如果您习惯使用eval()
来解析JSON,那么您将不会看到它。但是你应该使用JSON解析器,原因如下:
此处描述了Microsoft的HTML编码的ASP.NET实现。
https://msdn.microsoft.com/en-us/library/w3te6wfz(v=vs.110).aspx