2012-04-09 3 views
1

Я использую флот, чтобы сделать некоторый график, и у меня возникли проблемы с передачей tickSize с помощью json. Я использую MVC и передаю json в модели. Вот код, чтобы захватить 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,« день »] имеет квадратные скобки. Я думаю, что есть некоторая проблема синтаксического анализа, потому что [] обычно означает массив. Флот хочет размер галочки в этом формате. Как мне построить Json, чтобы я мог захватить TickSize?

+0

Я думаю TickSize считается строка, а не массив в JSON, так как он цитирует. Если бы это не было указано, это был бы массив. – stevebot

ответ

1

Проблема заключается в одинарных кавычках в строковом значении, так как вы пытаетесь также обернуть строку JSON в них. В результате JavaScript будет (усеченный):

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

Из-за теперь уже 4-кол апострофы, day фактически не является частью строки и создает синтаксическую ошибку.

Но, вы не должны даже не нужно цитировать и разобрать JSON, поскольку он является производным от синтаксиса JavaScript:

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

Если вам нужна строковое представление, вы можете либо stringify его в JavaScript:

var json = JSON.stringify(data): 

или бежать одиночные кавычки внутри строки на стороне сервера:

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

Или используйте 'JSON.stringify (<% = HttpUtility.JavaScriptStringEncode (Model.Json, addDoubleQuotes: true)%>)'. – Jesper

0

Это потому, что вы окружили строку ' вместо ". Это приводит к тому, что строка заканчивается с вашим первым '.

Перепишите свою первую линию, как

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

Решение: заменить один обратный слэш '\' с двойным '\\' обратный слеш.
Для символа новой строки «\ п» к «\\ п»
работы с Tooltip сообщений

Смежные вопросы