Javascript 在视图中解析控制器设置的json字符串
我的MVC控制器包含一个我想传递给视图的集合,因此我执行以下操作: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('[{
// 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"}];
。。这是完全正确的