escaping - How to escape a JSON string containing newline characters using JavaScript?

ID : 20290

viewed : 38

Tags : javascriptescapingjavascript

Top 5 Answer for escaping - How to escape a JSON string containing newline characters using JavaScript?

vote vote

91

Take your JSON and .stringify() it. Then use the .replace() method and replace all occurrences of \n with \\n.

EDIT:

As far as I know of, there are no well-known JS libraries for escaping all special characters in a string. But, you could chain the .replace() method and replace all of the special characters like this:

var myJSONString = JSON.stringify(myJSON); var myEscapedJSONString = myJSONString.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"); // myEscapedJSONString is now ready to be POST'ed to the server.  

But that's pretty nasty, isn't it? Enter the beauty of functions, in that they allow you to break code into pieces and keep the main flow of your script clean, and free of 8 chained .replace() calls. So let's put that functionality into a function called, escapeSpecialChars(). Let's go ahead and attach it to the prototype chain of the String object, so we can call escapeSpecialChars() directly on String objects.

Like so:

String.prototype.escapeSpecialChars = function() {     return this.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"); }; 

Once we have defined that function, the main body of our code is as simple as this:

var myJSONString = JSON.stringify(myJSON); var myEscapedJSONString = myJSONString.escapeSpecialChars(); // myEscapedJSONString is now ready to be POST'ed to the server 
vote vote

88

As per user667073 suggested, except reordering the backslash replacement first, and fixing the quote replacement

escape = function (str) {   return str     .replace(/[\\]/g, '\\\\')     .replace(/[\"]/g, '\\\"')     .replace(/[\/]/g, '\\/')     .replace(/[\b]/g, '\\b')     .replace(/[\f]/g, '\\f')     .replace(/[\n]/g, '\\n')     .replace(/[\r]/g, '\\r')     .replace(/[\t]/g, '\\t'); }; 
vote vote

72

Like you, I have been looking into several comments and post to replace special escape characters in my JSON which contains html object inside that.

My object is to remove the special characters in JSON object and also render the html which is inside the json object.

Here is what I did and hope its very simple to use.

First I did JSON.stringify my json object and JSON.parse the result.

For eg:

JSON.parse(JSON.stringify(jsonObject)); 

And it solves my problem and done using Pure Javascript.

vote vote

61

I'm afraid to say that answer given by Alex is rather incorrect, to put it mildly:

  • Some characters Alex tries to escape are not required to be escaped at all (like & and ');
  • \b is not at all the backspace character but rather a word boundary match
  • Characters required to be escaped are not handled.

This function

escape = function (str) {     // TODO: escape %x75 4HEXDIG ?? chars     return str       .replace(/[\"]/g, '\\"')       .replace(/[\\]/g, '\\\\')       .replace(/[\/]/g, '\\/')       .replace(/[\b]/g, '\\b')       .replace(/[\f]/g, '\\f')       .replace(/[\n]/g, '\\n')       .replace(/[\r]/g, '\\r')       .replace(/[\t]/g, '\\t')     ; }; 

appears to be a better approximation.

vote vote

53

A small update for single quotes

function escape (key, val) {     if (typeof(val)!="string") return val;     return val               .replace(/[\\]/g, '\\\\')         .replace(/[\/]/g, '\\/')         .replace(/[\b]/g, '\\b')         .replace(/[\f]/g, '\\f')         .replace(/[\n]/g, '\\n')         .replace(/[\r]/g, '\\r')         .replace(/[\t]/g, '\\t')         .replace(/[\"]/g, '\\"')         .replace(/\\'/g, "\\'");  }  var myJSONString = JSON.stringify(myJSON,escape); 

Top 3 video Explaining escaping - How to escape a JSON string containing newline characters using JavaScript?

Related QUESTION?