Javascript jQuery如何反序列化JSON?

Javascript jQuery如何反序列化JSON?,javascript,jquery,serialization,json,Javascript,Jquery,Serialization,Json,我正在使用jQuery.ajax(…)从ASP.NETMVC服务检索JSON数据。当服务器遇到异常时,我将400错误请求状态发送回客户端,并将异常作为JsonResult发送: Response.StatusCode = 400; return Json(new { ex.Message, ex.StackTrace }); 下面是我的jQuery代码: $.ajax( { type: "POST", url: deleteUrl, dataType: "json",

我正在使用jQuery.ajax(…)从ASP.NETMVC服务检索JSON数据。当服务器遇到异常时,我将400错误请求状态发送回客户端,并将异常作为JsonResult发送:

Response.StatusCode = 400;
return Json(new { ex.Message, ex.StackTrace });
下面是我的jQuery代码:

$.ajax(
{
    type: "POST",
    url: deleteUrl,
    dataType: "json",
    data:
    {
        dataItems: dataItems,
        toJSON: true
    },
    success: function(msg)
    {
        alert(msg[i].dataItem);
    },
    error: function(request, status, error)
    {
        alert(request.responseText);
    }
});
我的ASP.NET代码将我发送到JavaScript代码的错误部分,错误块只允许我读取request.responseText,而不允许我处理从服务器返回的对象

现在,我想简单地利用jQuery使用的同一个JSON解析器,而不是将另一个JavaScript include添加到类似的东西中并对我的异常进行反序列化,尽管我找不到关于它的信息


有人能给我指出正确的方向吗?

如果我没弄错的话,jQuery通常使用
eval
。从1.4版开始,如果存在本机JSON反序列化程序(例如Firefox中有一个),它将利用本机JSON反序列化程序。

我认为在javascript中,如果有JSON字符串,可以使用eval获取对象,即:

var myObject = eval('(' + myJSONtext + ')');

有关这方面的更多信息,请访问

,也许这会对您有所帮助。我使用它删除json中的注释和空格:

json = eval( o.responseText
    .replace( /\/\*(.*)\*\/g, ' ' )
    .replace( /([^\:])\/\/[^\n]*\n/g, '$1' )
    .replace( /^\s|\s+|\s$/g, '' ) )

我在Rick Strahl的博客上发现了一篇帖子(),其中解释道:“请注意,ajaxJSON函数需要JSON编码。jQuery没有任何本机JSON编码功能(这似乎是一个很大的遗漏,但可能是为了保留较小的内存占用)。但是,有许多JSON实现可用。在上面,我使用Douglas Crockford提供的JSON2.js文件将参数对象映射序列化为JSON。“我以为我在jQuery 1.4中读到了这一变化……变化的是jQuery现在将使用
JSON.parse
而不是
eval
,如果它可用的话。jQuery从来没有(现在仍然没有)提供对JSON序列化的OOTB支持。@Crescent,这应该作为一个答案,而不是一个注释。@Cheeso:这不是问题的答案。这不是解析数据的最安全方式。事实上,我收回了我说的话。因为在本例中,我只返回“安全”数据,而不是用户提供的数据,所以我可以使用eval安全地反序列化请求数据有人知道jQuery是否为此公开了一个方便的方法吗?@Peder:是的,
jQuery.httpData(请求,“json”)
将返回您解析的json/JavaScript对象。实际上,您不必指定“json”;httpData将默认为该值。无论如何,注释都不是合法的JSON。为什么在您的回复中返回它们?