4

我的 MVC 控制器包含一个我想传递给视图的集合,所以我这样做:

// myCollection is a list of objects
var j = new JavaScriptSerializer();
ViewBag.Data = j.Serialize(myCollection);

而在 JS 里面的视图上

var data = $.parseJSON('@Html.Raw(ViewBag.Data)');

.. 扩展为如下所示:

var data = $.parseJSON('[{"Value":2,"Fullname":"Value"}]');

这很好用,但如果我的 Json 字符串包含双引号,它会用反斜杠转义,并且 parseJson 失败,如下所示:

$.parseJSON('[{"Value":2,"Fullname":"Value \" with double quote"}]');

我该如何解决?

4

2 回答 2

1

虽然以下是有效的 JSON,但当字符串在 JavaScript 中时它不会保持这种状态,因为它会首先取消转义:

 '[{"Value":2,"Fullname":"Value \" with double quote"}]'

JavaScript 将首先将其转义为:

 '[{"Value":2,"Fullname":"Value " with double quote"}]'

当 JSON 出现时,它显然会看到一个意想不到的字符,因为引号现在正在寻找结束字符串。你需要做的是以\\"某种方式双引号(工作)这些,无论你是想在 JS 端还是 .NET 端都可能完全取决于你。

但是,实际上根本不需要使用 JSON 来解析它,您可以将它用作对象文字,如下所示:

var data = @Html.Raw(ViewBag.Data);

这将转换为:

var data = [{"Value":2,"Fullname":"Value \" with double quote"}];

..这是完全有效的。

于 2013-02-14T12:16:53.027 回答
-2

为什么不直接创建自定义函数,并在其中调用 parseJSON。但在那之前替换\"?

function parseJson(str){
    var temp = str.replace('\"', '"');
    return $.parseJSON(temp);
}
于 2013-02-14T12:07:00.017 回答