Javascript JSON.parse可以';“我不认识\”;(反斜杠和引号)在要分析的字符串中
我已经序列化了JSON,其中的对象在字符串中有引号,如下所示:Javascript JSON.parse可以';“我不认识\”;(反斜杠和引号)在要分析的字符串中,javascript,c#,json,Javascript,C#,Json,我已经序列化了JSON,其中的对象在字符串中有引号,如下所示: var bla = [ { "label": "person", "id": "1", "data": "bla means: \"lala\"" } ]; 我知道它在服务器端的外观。但当我在浏览器中调试它时,我发现我收到了错误,因为它如下所示: var bla = [ { "label": "person", "i
var bla = [
{
"label": "person",
"id": "1",
"data": "bla means: \"lala\""
}
];
我知道它在服务器端的外观。但当我在浏览器中调试它时,我发现我收到了错误,因为它如下所示:
var bla = [
{
"label": "person",
"id": "1",
"data": "bla means: "lala""
}
];
我的错误是:
未捕获的语法错误:JSON中位于位置25处的意外标记l
JSON.parse()
我读到JSON应该识别\“
我应该在哪里纠正它呢?在序列化对象时在服务器端还是在使用JavaScript的客户端
编辑:
在服务器端,我使用C#library“System.Web.Script.Serialization”
要序列化的对象:
List<SomeObject> someObject= new List<SomeObject>();
SomeObject bla1 = new SomeObject();
bla1.id = "1";
bla1.label = "person";
bla1.label = "bla means: \"lala\"";
someObject.Add(bla1);
List someObject=new List();
SomeObject bla1=新的SomeObject();
bla1.id=“1”;
bla1.label=“person”;
bla1.label=“bla的意思是:\“拉拉”;
someObject.Add(bla1);
var bla=new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(someObject);
摘要
我修复了服务器端的序列化字符串,因为我使用的API不能操作这些对象。
var bla=new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(someObject)。替换(“\\\”、“\\\\”);
服务器应提供可直接解析的正确序列化JSON,而客户端无需首先对数据进行复杂的字符串操作。(例如,如果您不在服务器端修复它,那么获取(…)将变得无效。然后(res=>res.json())
)服务器应该提供可以直接解析的正确序列化json,而客户端不必首先对数据进行复杂的字符串操作。(例如,如果您不在服务器端修复它,那么获取(…)将变得无效。然后(res=>res.json())
)您可以尝试使用双反斜杠或三反斜杠,如\\”或\\\\”
它将添加反斜杠并用双引号打印。您可以尝试使用双反斜杠或三反斜杠,如
\\”或\\\“
它将添加反斜杠并用双引号打印。我不完全理解您的项目结构,但是: 反斜杠是javascript中的一个特殊字符 它之所以特别是因为它有一个正则表达式的特殊含义
\hello
时,您的输出将是hello
\'hello
时,您的输出将是'hello
\“hello\”
时,您的输出将是“hello”
数据
属性
您希望数据是字符串?数组?对象?将所有引号保留为双引号或单引号的字符串
看看这里-
并决定要使用的字符串格式
如果你想转义一个字符(实际上意味着它在你的字符串中),你应该在这个字符之前添加
\
。我不完全理解你的项目结构,但是:
反斜杠是javascript中的一个特殊字符
它之所以特别是因为它有一个正则表达式的特殊含义
\hello
时,您的输出将是hello
\'hello
时,您的输出将是'hello
\“hello\”
时,您的输出将是“hello”
数据
属性
您希望数据是字符串?数组?对象?将所有引号保留为双引号或单引号的字符串
看看这里-
并决定要使用的字符串格式
如果你想转义一个字符(这实际上意味着它在你的字符串中),你应该在这个字符前面加上\
。在我的例子中,我只是使用
JSON.parse(`{“key”:“\”“}`)//失败
JSON.parse(String.raw`{“key”:“\”“}`)//work
在我的例子中,我只是使用
JSON.parse(`{“key”:“\”“}`)//失败
JSON.parse(String.raw`{“key”:“\”“}`)//work
这可能是服务器端的问题。您应该使用标准的JSON库,而不是自己尝试序列化。但就像我在JSON.org上读到的一样,它应该能够识别\“符号,并且不应该有问题。但是从另一方面讲,当您使用console.log()时,就没有机会在字符串中使用引号了
在带有嵌入引号的字符串上,它不会显示作为文本或JSON输入所需的反斜杠。发布创建JSON的代码。文档建议使用JSON.NET而不是JavaScriptSerializer。这可能是服务器端的问题。您应该使用标准JSON库,而不是尝试使用Java进行序列化但就像我在json.org上读到的一样,它应该认识到\“符号和不应该有问题。但从另一方面来说,当您使用console.log()时,就没有机会在字符串中使用引号了
在带有嵌入引号的字符串上,它不会显示作为文本或JSON输入所需的反斜杠。发布创建JSON的代码。文档建议使用JSON.NET而不是JavaScriptSerializery。解决方案可行。但编程很难,因为我使用API从中获取这些字符串。这意味着你不能添加双反斜杠?您使用的是哪种API?举个例子。我需要将其添加到序列化字符串中,或者只是剪切\“,但我不想这样做。或者说,这是唯一的方法?API示例:是的,这是唯一的方法,因为“\”被用作转义序列的一部分,这就是服务器无法识别字符串中双引号的原因。它正在处理\“作为一个转义序列。是的,你的解决方案是有效的。但编程很难,因为我使用API从我得到的字符串。这是什么?”
var bla = [
{
"label": "person",
"id": "1",
"data": "bla means: \\"lala\\""
}
];