【问题标题】:Special characters in JSON are breaking JSJSON 中的特殊字符正在破坏 JS
【发布时间】:2016-08-08 18:10:18
【问题描述】:

在 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 端的控制器上过滤掉这些?

【问题讨论】:

  • 我确实看到了那个帖子。我确实在那里尝试了解决方案,但遇到了问题。在控制器端这样做不是更好吗?
  • 请提供破坏JSON.parse()的数据示例。
  • 以下内容将破坏 Chrome 中的 JSON.parse(): var test = '[{"Description":"0.6g/ml 0.49g/ml USP34\nParticle Size NLT95% Through 80mesh 100%通过 80 目 USP34\n干燥失重 ≤10.0% 5.2% USP34\n符合麸质 ≤20PPM\n载体 50-60%麦芽糊精"}]'.replace("\n", "\\n ");

标签: javascript asp.net json


【解决方案1】:

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

但是,如果您想直接在您的 cshtml 中编写它,请查看这篇文章:How do I write unencoded Json to my View using Razor?,它展示了如何将未编码的 JSON 打印到页面上,其中一些特殊字符经过编码不会引起问题进一步解析。

【讨论】:

  • 如果我将 JSON 作为响应传递(我现在在项目的其他部分这样做),我仍然会遇到使用无效字符解析 JSON 的问题。
  • 您是否尝试过使用@Html.Raw(Json.Encode(/* ... */)),如我发布链接的问题的答案中所述?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
  • 1970-01-01
  • 1970-01-01
  • 2018-12-22
  • 1970-01-01
  • 2012-10-10
  • 1970-01-01
相关资源
最近更新 更多