【问题标题】:Escape special characters in JSON encoded string转义 JSON 编码字符串中的特殊字符
【发布时间】:2013-09-08 16:55:54
【问题描述】:

我将 Knockout 与 MVC 一起使用,我见过的获取用​​于淘汰的视图模型的标准方法是这样的:

var model = '@Html.Raw(Json.Encode(Model))';
var viewModel = ko.mapping.fromJSON(model);

但是,如果我的模型中包含特殊字符的字符串属性,例如'\r\n' 我收到 JSON 解析错误 'unexpected token'。

所以我相信我需要转义这些字符,使它们像“\\r\\n”。如何做到这一点?

我知道我可以针对这种特殊情况这样做:

var model = '@Html.Raw(Json.Encode(Model).Replace(@"\", @"\\"))';

但可能还有其他...标签、单引号。

以下是浏览器中实际渲染模型的示例:

var model = '{"Id":4465,"TextContents":["EYE FILLET STEAK\r\nLINE 2 IS HERE"]}';

【问题讨论】:

  • 对我来说这看起来像是一个有效的 JSON。为什么它用引号括起来?
  • 据我所知,由于 MVC 想要做事的方式。如果我删除引号,它会在 Razor 视图中出现语法错误。
  • 粘贴错误。你不应该需要引号。

标签: asp.net-mvc json knockout.js


【解决方案1】:

您的 model 是一个字符串,而不是 JSON。它在解析 JSON 之前评估转义字符(如果有的话?) 为什么需要引号?只需删除它们。

var model = @Html.Raw(Json.Encode(Model));

【讨论】:

  • 嗯.. 行得通。 Visual Studio 告诉我它是一个语法错误,但它可以在浏览器中编译并正常工作。我猜是愚蠢的VS2012。谢谢。
  • 试试这个var model = @(Html.Raw(Json.Encode(Model)));,看看它是否修复了警告。不幸的是,我手头没有 VS 可以尝试。
猜你喜欢
  • 1970-01-01
  • 2011-05-11
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
  • 2016-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多