[英]JSON.parse can't recognize \" (backslash and quote) in string to parse
我已经将对象的JSON序列化为字符串,如下所示:
var bla = [
{
"label": "person",
"id": "1",
"data": "bla means: \"lala\""
}
];
我知道它在服务器端的外观。 但是,当我在浏览器中对其进行调试时,我看到在此上我收到错误,因为它看起来如下:
var bla = [
{
"label": "person",
"id": "1",
"data": "bla means: "lala""
}
];
和我的错误:
Uncaught SyntaxError:JSON中意外的令牌l在JSON.parse()的位置25
我读到JSON应该可以识别\\“ https://www.json.org/
有什么想法我应该在哪里纠正? 在服务器端我序列化对象时还是在客户端使用JavaScript?
编辑:
在服务器端,我使用C#库"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);
var bla = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(someObject);
摘要
我在服务器端修复了序列化的字符串,因为我使用的API无法处理此对象。 var bla = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(someObject).Replace("\\\\\\"", "\\\\\\\\\\\\\\"");
您可以尝试使用双反斜杠或三反斜杠,例如\\\\" or \\\\\\"
var bla = [
{
"label": "person",
"id": "1",
"data": "bla means: \\"lala\\""
}
];
它将添加反斜杠并用双引号打印。
服务器应提供可直接解析的正确的序列化JSON,而客户端不必首先对数据进行棘手的字符串操作。 (例如,如果您不在服务器端对其进行修复,则fetch(...).then(res => res.json())
变得无效fetch(...).then(res => res.json())
)
我不完全了解您的项目的结构,但是:
反斜杠 \\
是javascript中的特殊字符。
之所以特殊是因为它具有正则表达式的特殊含义。
\\hello
,您的输出将是hello
\\'hello
,您的输出将是'hello
。 \\"hello\\"
,输出为"hello"
我认为您应该首先选择要如何精确格式化data
属性。
您要数据为字符串吗? 数组? 宾语? 保留所有引号为双引号或单引号的字符串?
在这里看看-https: //www.w3schools.com/js/js_strings.asp
并确定您要使用的字符串格式。
如果要转义字符 (实际上意味着将其包含在字符串中),则应在此字符前添加\\
。
就我而言,我只使用String.raw() 。
JSON.parse(`{ "key": "\""}`) // fail
JSON.parse(String.raw`{ "key": "\""}`) // work
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.