1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| function serialize(j){
if (j == null)
return "null";
// pour chaque type de données
switch(typeof j){
// si chaine de caractères, on échappe les caractères spéciaux et on entoure la chaine de ""
case "string":{
j=j.replace('"', '\"');
j=j.replace("\n", "\\n");
j=j.replace("\t", "\\t");
j=j.replace("\b", "\\b");
j=j.replace("\f", "\\f");
j=j.replace("\r", "\\r");
return '"' + j + '"';
}
// si nombre, on écrit simplement la valeur
case "number":
return j;
case "object":{
// si tableau, on sépare les éléments par des virgules et on entoure le tout par des crochets
if (j instanceof Array){
var result = "[";
for(var i=0; i<j.length; i++){
result += serialize(j[i]);
if (i+1 < j.length)
result += ",";
}
result += "]";
return result;
}else{
// si objet, on sépare les champs par des virgules et on entoure le tout par des accolades
var result = "{";
var properties = [];
var propertyCount = 0;
for (var prop in j){
properties[propertyCount] = prop;
propertyCount ++;
}
for (var i=0; i<propertyCount; i++){
result += properties[i] + ':' + serialize(j[properties[i]]);
if (i+1 < propertyCount)
result += ',';
}
result += "}";
return result;
}
}
// si booléen on affiche directement la valeur
case "boolean":
return (j)?'true':'false';
// si objets non sérialisables ou indéfinis (fonction, undefined ...) on renvoie une chaine vide pour garantir l'intégrité de la chaine JSON générée
default:
return "";
}
} |
Partager