我正在为包含方向生成JSON到HTML文件中,因此JSON被包装在Javascript字符串中。
e.g。
var dataContacts =
'{"Contacts":[{"Id":0,"Active":false,"Company":"Rory The Architect\\, Melt"}]}';
var contacts = $.parseJSON(dataContacts).Contacts;
此代码在javascript中失败,因为它应该是
var dataContacts =
'{"Contacts":[{"Id":0,"Active":false,"Company":"Rory The Architect\\\\, Melt"}]}';
var contacts = $.parseJSON(dataContacts).Contacts;
我已经同时使用了.NET Serializer和NewtonSoft.Json,并且都没有支持将\转换为\\\\,他们会将其转移到\中,这对于JSON的AJAX传输来说很好但是不适用于嵌入Javascript字符串的JSON
我假设我可能需要做某种myJson.Replace(“\”,“\\”);
我已经查看了为什么我需要输出中的\\,请在此处查看此链接:
Why does the jQuery JSON parser need double escaping for backslashes?
第一个转义符在Javascript字符串文字中转义它。该 第二个escape在JSON字符串文字中转义它。
Javascript表达式“{”a“:”b:\ c“}'计算字符串 '{ “一个”: “B:\ C”}'。此字符串包含一个未转义的\,必须 为JSON转义。为了得到一个包含\的字符串,每个\ 必须在Javascript表达式中进行转义,结果为“\\”。
我想知道这个问题的最佳前进道路以及为什么NewtonSoft或.NET序列化程序都不支持将JSON编码为直接包含在Javascript文件中
答案 0 :(得分:1)
在我看来,你通过艰难的方式做事会给你带来不必要的麻烦。为什么要将JSON放入JavaScript字符串中,以便您可以立即解析它? JSON已经是JavaScript,为什么不直接使用呢?
var dataContacts =
{"Contacts":[{"Id":0,"Active":false,"Company":"Rory The Architect\\, Melt"}]};
var contacts = dataContacts.Contacts;
正如Paul Draper所指出的那样,一旦撇号和其他角色开始参与,你所使用的方法会提供各种额外的复杂功能。
答案 1 :(得分:0)
这里实际上还存在第二个问题,您尚未确定:如果JSON包含单引号('
),例如, Rory's Architect
?
不仅Javscript字符串不是有效的JSON,它甚至不是有效的 Javascript !
var dataContacts =
'{"Contacts":[{"Id":0,"Active":false,"Company":"Rory's Architect\\, Melt"}]}';
要解决此问题,您可以(在C#中)
string myJsonString = myJson.Replace("\\", "\\\\").Replace("'", "\\'")
请注意,在C#中转义反斜杠是必要的,以获得\
,\\
和\'
。这是很多逃避,到处都是;)