Json.Parse escape newline characters

11,494

You should just escape the \ as in \\n, your JSON becoming :

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

If you cannot have access to the JSON, then your function should be :

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));
Share:
11,494
sanjeev
Author by

sanjeev

Updated on June 25, 2022

Comments

  • sanjeev
    sanjeev almost 2 years

    I have a page where I am trying to parse following json string using JSON.parse

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

    But following code gives error "Uncaught SyntaxError: Unexpected token"

    var groceriesJson = JSON.parse(jsonString);
    

    Then I came to know that its because of \n in json string. So I did try this solution. But no luck. Still same error "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));
    

    Any ideas? Thanks

    ---UPDATE----

    I am not creating this string manually, I have c# codes that creates json string from c# objects

     var jss = new System.Web.Script.Serialization.JavaScriptSerializer();
     var groceries = jss.Serialize(Model);
    

    then in javascript codes I have

    var jsonString = '@Html.Raw(groceries)'
     var groceriesJson = JSON.parse(escapeSpecialChars(jsonString));