0

我正在生成 JSON 以将包含方向包含到 HTML 文件中,因此 JSON 被包装在 Javascript 字符串中。

例如

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 交付来说很好,但不适用于 JSON嵌入到 Javascript 字符串中

我想我可能需要做一些 myJson.Replace("\", "\\");

我已经查看了为什么在输出中需要 \\ ,请在此处查看此链接:

为什么 jQuery JSON 解析器需要对反斜杠进行双重转义?

第一个转义在 Javascript 字符串文字中对其进行转义。第二个转义在 JSON 字符串文字中对其进行转义。

Javascript 表达式 '{"a":"b:\c"}' 计算为字符串 '{"a":"b:\c"}'。此字符串包含一个未转义的 \,对于 JSON,必须对其进行转义。为了得到一个包含 \ 的字符串,每个 \ 必须在 Javascript 表达式中进行转义,从而产生“\\”。

我想知道解决这个问题的最佳途径,以及为什么 NewtonSoft 或 .NET 序列化程序都不支持将 JSON 编码为直接包含到 Javascript 文件中

4

2 回答 2

1

在我看来,你以艰难的方式做事给自己造成了不必要的麻烦。为什么要将 JSON 放入 JavaScript 字符串中,以便立即解析它?JSON 已经是 JavaScript,为什么不直接使用它呢?

var dataContacts = 
       {"Contacts":[{"Id":0,"Active":false,"Company":"Rory The Architect\\, Melt"}]};

var contacts = dataContacts.Contacts;

正如 Paul Draper 指出的那样,一旦撇号和其他字符开始涉及,您尝试使用的方法会带来各种额外的复杂性。

于 2013-11-11T08:04:20.870 回答
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# 中转义反斜杠对于获取\\\\'. 到处都是逃避;)

于 2013-11-11T06:34:18.147 回答