.NET创建JSON对象,其中value包含引号

时间:2016-06-25 19:29:36

标签: javascript .net json

我使用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生成它。

我错过了什么吗?

1 个答案:

答案 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,而无需人工干预。这应该可以防止像你那样的问题。