Existe-t-il une fonction rapide permettant de convertir des objets JSON reçus via jQuery getJSON
à un vidage de variable de chaîne (à des fins de traçage/débogage) ?
Réponses
Trop de publicités?Oui, JSON.stringify
On peut trouver ici c'est inclus dans Firefox 3.5.4 et plus.
Un stringificateur JSON va dans la direction opposée, en convertissant les structures de données JavaScript en texte JSON. JSON ne supporte pas les structures de données cycliques, il faut donc veiller à ne pas donner de structures cycliques au stringificateur JSON. https://web.archive.org/web/20100611210643/http://www.json.org/js.html
var myJSONText = JSON.stringify(myObject, replacer);
Vous pouvez utiliser console.log()
dans Firebug ou Chrome pour obtenir une bonne vue de l'objet ici, comme ceci :
$.getJSON('my.json', function(data) {
console.log(data);
});
Si vous voulez juste voir la chaîne, regardez le Affichage des ressources dans Chrome ou le Vue du réseau dans Firebug pour voir la réponse réelle du serveur (pas besoin de la convertir... vous l'avez reçue de cette façon).
Si vous voulez prendre cette chaîne et la décomposer pour la visualiser facilement, il y a un excellent outil ici : http://json.parser.online.fr/
J'utilise personnellement le plugin jquery dump alot pour vider les objets, c'est un peu similaire à la fonction print_r() de php. Utilisation de base :
var obj = {
hubba: "Some string...",
bubba: 12.5,
dubba: ["One", "Two", "Three"]
}
$("#dump").append($.dump(obj));
/* will return:
Object {
hubba: "Some string..."
bubba: 12.5
dubba: Array (
0 => "One"
1 => "Two"
2 => "Three"
)
}
*/
Sa lecture est très humaine, je recommande également ce site. http://json.parser.online.fr/ pour créer/parser/lire le json, car il a de belles couleurs
Voici le code que j'utilise. Vous devriez pouvoir l'adapter à vos besoins.
function process_test_json() {
var jsonDataArr = { "Errors":[],"Success":true,"Data":{"step0":{"collectionNameStr":"dei_ideas_org_Private","url_root":"http:\/\/192.168.1.128:8500\/dei-ideas_org\/","collectionPathStr":"C:\\ColdFusion8\\wwwroot\\dei-ideas_org\\wwwrootchapter0-2\\verity_collections\\","writeVerityLastFileNameStr":"C:\\ColdFusion8\\wwwroot\\dei-ideas_org\\wwwroot\\chapter0-2\\VerityLastFileName.txt","doneFlag":false,"state_dbrec":{},"errorMsgStr":"","fileroot":"C:\\ColdFusion8\\wwwroot\\dei-ideas_org\\wwwroot"}}};
var htmlStr= "<h3 class='recurse_title'>[jsonDataArr] struct is</h3> " + recurse( jsonDataArr );
alert( htmlStr );
$( document.createElement('div') ).attr( "class", "main_div").html( htmlStr ).appendTo('div#out');
$("div#outAsHtml").text( $("div#out").html() );
}
function recurse( data ) {
var htmlRetStr = "<ul class='recurseObj' >";
for (var key in data) {
if (typeof(data[key])== 'object' && data[key] != null) {
htmlRetStr += "<li class='keyObj' ><strong>" + key + ":</strong><ul class='recurseSubObj' >";
htmlRetStr += recurse( data[key] );
htmlRetStr += '</ul ></li >';
} else {
htmlRetStr += ("<li class='keyStr' ><strong>" + key + ': </strong>"' + data[key] + '"</li >' );
}
};
htmlRetStr += '</ul >';
return( htmlRetStr );
}
</script>
</head><body>
<button onclick="process_test_json()" >Run process_test_json()</button>
<div id="out"></div>
<div id="outAsHtml"></div>
</body>
Quelque chose comme ça ?
function dump(x, indent) {
var indent = indent || '';
var s = '';
if (Array.isArray(x)) {
s += '[';
for (var i=0; i<x.length; i++) {
s += dump(x[i], indent)
if (i < x.length-1) s += ', ';
}
s +=']';
} else if (x === null) {
s = 'NULL';
} else switch(typeof x) {
case 'undefined':
s += 'UNDEFINED';
break;
case 'object':
s += "{ ";
var first = true;
for (var p in x) {
if (!first) s += indent + ' ';
s += p + ': ';
s += dump(x[p], indent + ' ');
s += "\n"
first = false;
}
s += '}';
break;
case 'boolean':
s += (x) ? 'TRUE' : 'FALSE';
break;
case 'number':
s += x;
break;
case 'string':
s += '"' + x + '"';
break;
case 'function':
s += '<FUNCTION>';
break;
default:
s += x;
break;
}
return s;
}