JSON ssortingngify manquant à jQuery 1.4.1?

Apparemment, jQuery a la capacité de décoder un object ou une chaîne donnée en un object JSON. Cependant, j’ai un object JS que je dois retourner sur le serveur et je ne trouve aucun utilitaire dans jQuery qui encapsule la fonction JSON.ssortingngify (). Cette fonction se trouve dans Chrome, Safari 4, FF3.6 et IE8, mais ne se trouve pas dans les navigateurs précédents. Je peux l’utiliser en mode natif dans les navigateurs qui le prennent en charge, mais je suis obligé de recourir aux scripts JSON de Crockford.

Y a-t-il un composant intégré avec jQuery qui gère l’encodage et le décodage JSON qui remplace les scripts Crockford?

Vous pourriez vouloir vérifier ceci: http://www.json.org/js.html

Vous pouvez utiliser “Closure Library” (Google) pour créer un encodeur / décodeur JSON utilisant plusieurs navigateurs.

Il suffit d’aller sur http://closure-comstackr.appspot.com/

et insérez ce qui suit dans le champ de texte, puis appuyez sur “Comstackr”:

// ==ClosureComstackr== // @compilation_level ADVANCED_OPTIMIZATIONS // @output_file_name default.js // @use_closure_library true // ==/ClosureComstackr== goog.require('goog.json'); if (!window['JSON']) window['JSON']={}; if (typeof window['JSON']['ssortingngify'] !== 'function') window['JSON']['ssortingngify']=goog.json.serialize; if (typeof window['JSON']['parse'] !== 'function') window['JSON']['parse']=goog.json.parse; 

jQuery peut décoder les chaînes JSON en mode natif avec jQuery.parseJSON() .

Pour l’encodage cependant, je ne connais qu’un plugin: jquery-json

jQuery n’a pas besoin de cette fonctionnalité en interne et ne fournit donc pas de méthode pratique pour le faire.

JSON.ssortingngify () est la méthode standard et recommandée pour coder un object en une représentation sous forme de chaîne JSON de cet object. C’est une méthode de l’object JSON natif dans de nombreux navigateurs, et il est recommandé d’utiliser json2.js (https://github.com/douglascrockford/JSON-js) pour fournir une solution de secours.

Pour construire sur la réponse de stewe, le compilateur de fermeture avec Advanced activé vous donne un script qui pollue l’espace de noms global avec un tas de variables à une lettre. Donc, je viens de l’envelopper dans un appel de fonction anonyme comme ceci:

(function() { function g(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toSsortingng.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null"; else if("function"==b&&"undefined"==typeof a.call)return"object";return b};function h(a){a=""+a;if(/^\s*$/.test(a)?0:/^[\],:{}\s\u2028\u2029]*$/.test(a.replace(/\\["\\\/bfnrtu]/g,"@").replace(/"[^"\\\n\r\u2028\u2029\x00-\x08\x10-\x1f\x80-\x9f]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:[\s\u2028\u2029]*\[)+/g,"")))try{return eval("("+a+")")}catch(b){}throw Error("Invalid JSON ssortingng: "+a);}function i(a,b){var c=[];j(new k(b),a,c);return c.join("")}function k(a){this.a=a} function j(a,b,c){switch(typeof b){case "ssortingng":l(b,c);break;case "number":c.push(isFinite(b)&&!isNaN(b)?b:"null");break;case "boolean":c.push(b);break;case "undefined":c.push("null");break;case "object":if(null==b){c.push("null");break}if("array"==g(b)){var f=b.length;c.push("[");for(var d="",e=0;eb?d+="000":256>b?d+="00":4096>b&&(d+="0");return m[a]=d+b.toSsortingng(16)}),'"')};window.JSON||(window.JSON={});"function"!==typeof window.JSON.ssortingngify&&(window.JSON.ssortingngify=i);"function"!==typeof window.JSON.parse&&(window.JSON.parse=h); })();

Maintenant, vous pouvez appeler:

var JSONSsortingng = JSON.ssortingngify({name: 'value'});

Souvent, la fonction JSON.ssortingngify () n’est pas requirejse lors de l’utilisation de jQuery. Prenons par exemple le cas habituel d’utilisation d’ajax pour envoyer des données javascript au serveur, jquery a des fonctions intégrées pour gérer ceci: (exemples de http://api.jquery.com/category/ajax/ )

 $.post("test.php", { name: "John", time: "2pm" } ); $.post("test.php", { 'choices[]': ["Jon", "Susan"] }); $.getJSON("test.js", { name: "John", time: "2pm" }, function(json) { alert("JSON Data: " + json.users[3].name); }); 

Dans tous les exemples ci-dessus, les données javascript envoyées sont sérialisées automatiquement par jQuery.

La sérialisation dans ces cas n’est pas la même que JSON.Ssortingngify (), au lieu de cela les données sont sérialisées dans une chaîne de requête html (voir: http://en.wikipedia.org/wiki/Query_ssortingng#Structure ).

Cependant, cette forme de sérialisation convient à la plupart des applications (mais pas à toutes)