0

我需要将一些简单的对象从 .NET 序列化为 JavaScript ......

但是我的apex有点问题...

C# 示例

var obj = new { id = 0, label = @"some ""important"" text" };
string json1 = Newtonsoft.Json.JsonConvert.SerializeObject(obj);
string json2 = Newtonsoft.Json.JsonConvert.SerializeObject(obj,
                   new Newtonsoft.Json.JsonSerializerSettings() 
                   {
                       StringEscapeHandling = Newtonsoft.Json.StringEscapeHandling.EscapeHtml 
                   });

JavaScript 示例

var resJson1= JSON.parse('{"id":0,"label":"some \"important\" text"}');
var resJson2= JSON.parse('{"id":0,"label":"some \u0022important\u0022 text"}');

两个解析都给我同样的错误

VM517:1 未捕获的语法错误:JSON.parse(<anonymous>) 位置 23 处 JSON 中的意外令牌 I

我哪里错了?

4

1 回答 1

0

您将生成的 JSON 字符串粘贴到 JavaScript 字符串常量中,而无需进一步转义。尝试

console.log('{"id":0,"label":"some \"important\" text"}');

您会看到{"id":0,"label":"some "important" text"},即“重要”引号不再被反斜杠转义。(您的\u0022示例也会得到相同的结果。)如果您想粘贴反斜杠,您将不得不再次转义它们:

var resJson1= JSON.parse('{"id":0,"label":"some \\"important\\" text"}');

如果从文件或 URL 中读取,您使用单个反斜杠生成的 JSON 就可以了,而不是作为字符串常量粘贴到 JavaScript 中。

于 2018-09-12T15:43:47.890 回答