用撇号返回JsonResult

时间:2015-11-24 19:09:56

标签: javascript c# json

据我所知,我收到一个解析器错误,因为我返回的一些数据包含撇号。

错误我得到了

  

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的新手,所以我不确定如何解决这个问题。有没有办法逃脱所有的撇号?或者我还应该做些什么。

如果我说的话不清楚,请告诉我。谢谢!

4 个答案:

答案 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解析器,原因如下:

http://www.json.org/js.html

此处描述了Microsoft的HTML编码的ASP.NET实现。

https://msdn.microsoft.com/en-us/library/w3te6wfz(v=vs.110).aspx