2012-04-09 24 views
1

Ich benutze Flot, um einige Grafiken zu machen, und ich habe einige Schwierigkeiten, die TickSize mit meinem JSON zu übergeben. Ich benutze MVC und gebe den JSON in einem Modell weiter. Hier ist ein Code der json in meinem JavaScript-Funktion zu greifen:Parsen von JSON mit Sonderzeichen

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

Hier ist, wie die Json sieht die Steuerung zu verlassen: „Ticksize“

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

Der Teil, das ich habe Probleme mit ist Wie Sie sehen können, hat "[1, 'Tag']" die eckigen Klammern. Ich denke, es gibt ein Parsing-Problem, weil [] normalerweise ein Array bedeutet. Flot möchte die Tick-Größe in diesem Format haben. Wie konstruiere ich meinen Json, damit ich die TickSize greifen kann?

+0

Ich denke, Ticksize einen String und nicht Array in JSON betrachtet wird, weil es zitiert wird. Wenn es nicht zitiert würde, wäre es ein Array. – stevebot

Antwort

1

Das Problem ist die einfache Anführungszeichen in der Zeichenfolge Wert, da Sie versuchen, die JSON-Zeichenfolge in ihnen auch zu umbrechen. Das resultierende JavaScript wird (abgeschnitten) wird:

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

Aufgrund des jetzt 4-count von Apostrophe ist day nicht wirklich Teil der Zeichenfolge und erzeugt einen Syntaxfehler.

Aber Sie sollten nicht einmal müssen die JSON zitieren und zu analysieren, da sie von JavaScript-Syntax abgeleitet ist:

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

Wenn Sie die String-Darstellung benötigen, können Sie entweder stringify es in JavaScript:

var json = JSON.stringify(data): 

Oder entkommen Apostrophe innerhalb der Zeichenfolge serverseitigen:

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

Oder verwenden Sie 'JSON.stringify (<% = HttpUtility.JavaScriptStringEncode (Model.Json, addDoubleQuotes: true)%>)'. – Jesper

0

Es liegt daran, dass Sie die Zeichenfolge mit ' anstelle von " umgeben haben. Dies bewirkt, dass die Zeichenfolge mit Ihrer ersten ' endet.

Ihre erste Linie als

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

Lösung Rewrite: einzelne Backslash ersetzen '\' mit Doppel '\\' Backslash.
Für Newline Zeichen ‚\ n‘ zu ‚\\ n‘
Arbeiten mit Tooltip Nachrichten