2012-04-09 131 views
1

我正在使用flot來做一些繪圖工作,並且在使用我的json傳遞tickSize時遇到了一些問題。我正在使用MVC並在模型中傳遞json。下面是一些代碼來抓住我的javascript函數中的JSON:解析特殊字符的JSON

var json = '<%=Model.Json %>'; 
var data = jQuery.parseJSON(json); 

這裏是JSON的外觀留下控制器:

{\"GraphData\":[{\"X\":1333929600000,\"Y\":0.0},{\"X\":1333670400000,\"Y\":0.46}],\"Max\":1333324800000,\"Min\":1333929600000,\"TickSize\":\"[1, 'day']\"} 

說我有麻煩的部分「TickSize。」正如你所看到的,「[1,'day']」有方括號。我認爲有一些解析問題,因爲[]通常意味着一個數組。 Flot想要這種格式的刻度尺寸。我如何構建Json,以便獲取TickSize?

+0

我覺得TickSize被認爲是JSON字符串,而不是數組,因爲它被引用。如果沒有引用它,它將是一個數組。 – stevebot 2012-04-09 21:40:33

回答

1

問題是字符串值中的單引號,因爲您正在嘗試將JSON字符串包裝在它們中。產生的JavaScript的將被(部分):由於單引號的,現在4計數的

var json = '...,\"TickSize\":\"[1, 'day']\"}'; 

day實際上不是字符串的一部分,並創建一個語法錯誤。

但是,你不應該甚至需要引用和解析JSON,因爲它是從JavaScript語法得出:

var data = <%= Model.Json %>; 

如果你需要的字符串表示,你可以字符串化它的JavaScript:

var json = JSON.stringify(data): 

或轉義字符串服務器端內的單引號:

var json = '<%= Model.Json.Replace("'", "\\'") %>'; 
+0

或者使用'JSON.stringify(<%= HttpUtility.JavaScriptStringEncode(Model.Json,addDoubleQuotes:true)%>)'。 – Jesper 2012-04-19 07:45:47

0

這是因爲你用'而不是"包圍了字符串。這導致字符串以您的第一個'終止。

重寫你的第一線

var json = "<%=Model.Json %>"; 
0

解決方案:雙 '\\' 反斜槓代替單反斜槓 '\'。
對於換行符「\ n」到「\\ N」
作品與工具提示消息