san*_*eev 6 javascript c# regex json escaping
我有一个页面,我试图使用JSON.parse解析json字符串
'[{"Name":"Eggs","Complete":false,"Notes":"Notes here\n"},{"Name":"Sugar","Complete":false,"Notes":null}]'
Run Code Online (Sandbox Code Playgroud)
但是下面的代码会出错 "Uncaught SyntaxError: Unexpected token"
var groceriesJson = JSON.parse(jsonString);
Run Code Online (Sandbox Code Playgroud)
然后我才知道它因为\n在json字符串中.所以我尝试了这个解决方案.但没有运气.还是一样的错误"Uncaught SyntaxError: Unexpected token"
function escapeSpecialChars(jsonString) {
return jsonString.replace(/\\n/g, "\\n")
.replace(/\\'/g, "\\'")
.replace(/\\"/g, '\\"')
.replace(/\\&/g, "\\&")
.replace(/\\r/g, "\\r")
.replace(/\\t/g, "\\t")
.replace(/\\b/g, "\\b")
.replace(/\\f/g, "\\f");
}
var groceriesJson = JSON.parse(escapeSpecialChars(jsonString));
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢
---更新----
我不是手动创建这个字符串,我有c#代码从c#对象创建json字符串
var jss = new System.Web.Script.Serialization.JavaScriptSerializer();
var groceries = jss.Serialize(Model);
Run Code Online (Sandbox Code Playgroud)
然后在我的JavaScript代码中
var jsonString = '@Html.Raw(groceries)'
var groceriesJson = JSON.parse(escapeSpecialChars(jsonString));
Run Code Online (Sandbox Code Playgroud)
你应该只逃脱\在\\n,你的JSON成为:
'[{"Name":"Eggs","Complete":false,"Notes":"Notes here\\n"},{"Name":"Sugar","Complete":false,"Notes":null}]';
Run Code Online (Sandbox Code Playgroud)
如果您无法访问JSON,那么您的函数应该是:
function escapeSpecialChars(jsonString) {
return jsonString.replace(/\n/g, "\\n")
.replace(/\r/g, "\\r")
.replace(/\t/g, "\\t")
.replace(/\f/g, "\\f");
}
var groceriesJson = JSON.parse(escapeSpecialChars(jsonString));
Run Code Online (Sandbox Code Playgroud)