Javascript 在视图中解析控制器设置的json字符串

Javascript 在视图中解析控制器设置的json字符串,javascript,jquery,asp.net-mvc,Javascript,Jquery,Asp.net Mvc,我的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('[{

我的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"}]');

如何解决这个问题?

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

function parseJson(str){
    var temp = str.replace('\"', '"');
    return $.parseJSON(temp);
}

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

 '[{"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"}];
。。这是完全正确的