使用特殊字符解析 JSON

Parsing JSON with special characters

本文关键字:JSON 特殊字符      更新时间:2023-09-26

我正在使用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, '天']"带有方括号。 我认为存在一些解析问题,因为 [] 通常意味着一个数组。 Flot 希望这种格式的即时报价大小。 如何构建我的 Json 以便我可以获取即时报价大小?

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

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

将第一行重写为

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

解决方案:将单反斜杠"''"替换为双反斜杠"''''"。
对于换行符"'"到"'''"
使用工具提示消息