2

我正在使用 flot 进行一些绘图,并且在通过我的 json 传递 tickSize 时遇到了一些问题。我正在使用 MVC 并在模型中传递 json。这是一些在我的 javascript 函数中获取 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?

4

3 回答 3

2

问题是字符串值中的单引号,因为您也尝试将 JSON 字符串包装在其中。生成的 JavaScript 将被(截断):

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

由于现在有 4 个单引号,day它实际上并不是字符串的一部分,并且会产生语法错误。

但是,您甚至不需要引用和解析 JSON,因为它源自 JavaScript 语法:

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

如果您需要字符串表示,您可以在 JavaScript 中对其进行字符串化:

var json = JSON.stringify(data):

或者在字符串服务器端转义单引号:

var json = '<%= Model.Json.Replace("'", "\\'") %>';
于 2012-04-09T21:42:52.150 回答
0

解决方案: 将单个反斜杠“\”替换为双“\\”反斜杠。
对于换行符 '\n' 到 '\\n'
适用于工具提示消息

于 2012-04-19T07:24:10.503 回答
0

这是因为你用'而不是包围了字符串"。这导致字符串以您的第一个'.

将第一行重写为

var json = "<%=Model.Json %>";
于 2012-04-09T21:45:02.570 回答