2013-02-14 31 views
4
解析JSON字符串

我的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字符串包含雙引號得到它的逃脫w^ith反斜槓,parseJson失敗,像這樣:

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

我該如何解決這個問題?

回答

1

雖然下面是有效的JSON,它不會像留,當字符串是在JavaScript中,因爲它會首先反轉義:

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

的JavaScript將第一UNESCAPE這成爲:

'[{"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"}]; 

。這完全有效。

-2

爲什麼不只是創建自定義函數,並在其中調用parseJSON。但在此之前替換\」

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