2014-10-17 85 views
5

我在那里,我试图解析以下使用JSON.parseJson.Parse逃脱换行符

'[{"Name":"Eggs","Complete":false,"Notes":"Notes here\n"},{"Name":"Sugar","Complete":false,"Notes":null}]' 

JSON字符串一个页面,但下面的代码提供错误"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)); 

任何想法?由于

---更新----

我不会手动创建这个字符串,我有一个从C#创建JSON字符串C#代码对象

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)); 
+3

你为什么试图在你的JavaScript中嵌入JSON作为字符串文字?只要将它用作数组文字并跳过手动分析步骤即可。 – Quentin 2014-10-17 08:32:07

+0

That works.I'll it mark it as answer if you can post answer。谢谢 – sanjeev 2014-10-17 08:43:48

回答

3

你应该只逃脱\\\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)); 
+0

我没有手动创建json字符串。我更新了我的问题。 – sanjeev 2014-10-17 08:45:31

0

由于@Quentin建议你可以跳过存储的文字里面的价值,简单地做这样的事情:

var jsonObject = @Html.Raw(groceries);