JSON中的特殊字符打破了JS

时间:2016-08-08 18:10:18

标签: javascript asp.net json

在ASP MVC控制器中,我创建了一个ViewBag变量,其中包含要在我的页面上加载的项目列表:

    public ActionResult Items()
    {
        ViewBag.itemList = Repo.GetItems(); // Returns list of Items
        return View("Items");
    }

在页面方面,我正在解析这些数据:

@{
Newtonsoft.Json.JsonSerializerSettings jsonSettings = new Newtonsoft.Json.JsonSerializerSettings { ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver() };
var jsonData = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model, Newtonsoft.Json.Formatting.Indented, jsonSettings));
var serial = new System.Web.Script.Serialization.JavaScriptSerializer();
var items = serial.Serialize(ViewBag.itemList);
}

在我的Knockout加载函数中,我解析列表并删除打破JSON.parse()函数的换行符。

self.load = function () {
var itemsEscaped = '@Html.Raw(items.Replace("'", "\\'"))'.replace("\n", "\\n");
var someItems = JSON.parse(itemsEscaped);
ko.mapping.fromJS(someItems, self.itemMapping, self.someItems);
}

但是,其他特殊字符偶尔会破坏JSON.parse()函数。有没有办法在JS端的控制器上过滤掉这些?

1 个答案:

答案 0 :(得分:0)

您可以将其作为对服务器的JavaScript请求的响应传递给您,而不是将您的JSON直接写入页面的HTML。

但是,如果您想直接在您的cshtml中编写它,请查看以下帖子:How do I write unencoded Json to my View using Razor?,其中显示了如何将未编码的JSON打印到页面上,其中包含一些不编码的特殊字符导致进一步解析的问题。