Prenez votre JSON et .stringify()
ça. Utilisez ensuite la .replace()
méthode et remplacez toutes les occurrences de \n
par \\n
.
ÉDITER:
Pour autant que je sache, il n'existe pas de bibliothèques JS bien connues pour échapper à tous les caractères spéciaux d'une chaîne. Mais vous pouvez chaîner la .replace()
méthode et remplacer tous les caractères spéciaux comme ceci:
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.
Mais c'est assez méchant, n'est-ce pas? Entrez la beauté des fonctions, en ce qu'elles vous permettent de diviser le code en morceaux et de garder le flux principal de votre script propre et exempt de 8 .replace()
appels en chaîne . Mettons donc cette fonctionnalité dans une fonction appelée escapeSpecialChars()
,. Allons allez - y et le joindre à la prototype chain
de l' String
objet, afin que nous puissions appeler escapeSpecialChars()
directement sur des objets String.
Ainsi:
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");
};
Une fois que nous avons défini cette fonction, le corps principal de notre code est aussi simple que ceci:
var myJSONString = JSON.stringify(myJSON);
var myEscapedJSONString = myJSONString.escapeSpecialChars();
// myEscapedJSONString is now ready to be POST'ed to the server