我使用Newtonsoft.Json
生成JSON对象:
JObject testObject = new JObject();
testObject["key"] = "\"value\"";
var result = testObject.ToString();
Console.WriteLine(result);
此操作的结果是:{ "key": "\"value\"" }
但是,当我尝试使用JS解析它时:
var data = JSON.parse( '{ "key": "\"value\"" }' );
我收到错误:Uncaught SyntaxError: Unexpected token v in JSON at position 11
如果我手动将json更改为:{ "key": "\\"value\\"" }
,它会正确解析它。但是,我无法从.NET生成它。
我错过了什么吗?
答案 0 :(得分:2)
我错过了什么吗?
您缺少的是您尝试将JSON复制到JavaScript字符串文字中,但是您没有正确地将其转义。
如果要将JSON { "key": "\"value\"" }
放入字符串文字中,则此值包含反斜杠,因此您必须转义它们:
var data = JSON.parse( '{ "key": "\\"value\\"" }' );
这正是您发现正常工作的原因。
如果您尝试运行该行:
var data = JSON.parse( '{ "key": "\"value\"" }' );
该字符串文字的计算结果为{ "key": ""value"" }
,它与Newtonsoft生成的JSON不同,并且不是有效的JSON。
底线:看起来您已经使用库生成了一些有效的JSON,但之后您尝试手动复制它并在此过程中创建了一个错误。也许这仅仅是为了实验,但你应该为JSON设置一条通道,让你从Newtonsoft传递到你的JavaScript,而无需人工干预。这应该可以防止像你那样的问题。