【问题标题】:Parsing JSON with special characters使用特殊字符解析 JSON
【发布时间】:2012-04-22 05:44:29
【问题描述】:

我正在使用 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?

【问题讨论】:

  • 我认为 TickSize 在 JSON 中被认为是一个字符串而不是数组,因为它被引用了。如果它没有被引用,它将是一个数组。

标签: javascript json model-view-controller flot


【解决方案1】:

问题在于字符串值中的单引号,因为您也尝试将 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("'", "\\'") %>';

【讨论】:

  • 或使用JSON.stringify(&lt;%= HttpUtility.JavaScriptStringEncode(Model.Json, addDoubleQuotes: true) %&gt;)
【解决方案2】:

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

将第一行改写为

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多