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

Javascript .NET创建JSON对象,其中值包含引号,javascript,.net,json,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\"

我正在使用
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\"" }' );
我收到错误:
uncaughtsyntaxerror:JSON中的意外标记v位于位置11

如果我手动将json更改为:
{“key”:“\\”value\\\”}
,它将正确解析它。但是,我无法从.NET生成它

我错过什么了吗

我错过什么了吗

您缺少的是,您试图将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。这应该可以防止像你这样的问题

我错过什么了吗

您缺少的是,您试图将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。这应该可以防止类似您所遇到的问题。

不必进行任何手动转义。。如果您执行
testObject[“key”]=“value””?我对newtonSoft一无所知,但所有其他语言的序列化程序都会处理转义。为什么要执行
testObject[“key”]=“value\”而不是
testObject[“key”]=“value”@ZohaibIjaz清楚地说明了为什么在标题中。。。OP需要报价text@ZohaibIjaz仅举一个例子,value基本上是一个字符串,其中包含引号,例如:“在引号之前\”“在引号之间\”“在引号之后”@charlietfl
testObject[“key”]=““value””不是有效的C#。但问题不在于Newtonsoft。问题是OP试图手动将JSON复制到JavaScript,但操作不正确。不应该进行任何手动转义。。如果您执行
testObject[“key”]=“value””?我对newtonSoft一无所知,但所有其他语言的序列化程序都会处理转义。为什么要执行
testObject[“key”]=“value\”而不是
testObject[“key”]=“value”@ZohaibIjaz清楚地说明了为什么在标题中。。。OP需要报价text@ZohaibIjaz仅举一个例子,value基本上是一个字符串,其中包含引号,例如:“在引号之前\”“在引号之间\”“在引号之后”@charlietfl
testObject[“key”]=““value””不是有效的C#。但问题不在于Newtonsoft。问题是OP试图手动将JSON复制到JavaScript,但操作不正确。