Json.Parse转义换行符

时间:2014-10-17 08:28:03

标签: javascript c# regex json escaping

我有一个页面,我试图使用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));

2 个答案:

答案 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);