我有一个页面,我试图使用JSON.parse
解析json字符串'[{"Name":"Eggs","Complete":false,"Notes":"Notes here\n"},{"Name":"Sugar","Complete":false,"Notes":null}]'
但是下面的代码会给出错误"Uncaught SyntaxError: Unexpected token"
var groceriesJson = JSON.parse(jsonString);
然后我开始知道它是因为json字符串中的\n
。所以我尝试了this solution。但没有运气。仍然是同样的错误"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));
有什么想法吗?感谢
--- ---- UPDATE
我不是手动创建这个字符串,我有c#代码从c#对象创建json字符串
var jss = new System.Web.Script.Serialization.JavaScriptSerializer();
var groceries = jss.Serialize(Model);
然后在javascript代码中我有
var jsonString = '@Html.Raw(groceries)'
var groceriesJson = JSON.parse(escapeSpecialChars(jsonString));
答案 0 :(得分:5)
你应该像\
一样逃避\\n
,你的JSON成为:
'[{"Name":"Eggs","Complete":false,"Notes":"Notes here\\n"},{"Name":"Sugar","Complete":false,"Notes":null}]';
如果您无法访问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));
答案 1 :(得分:0)
正如@Quentin建议您可以跳过将值存储在文字中并简单地执行以下操作:
var jsonObject = @Html.Raw(groceries);