Question

Apparemment, jQuery a la capacité de décoder un objet donné ou une chaîne dans un objet JSON. Cependant, j'ai un objet JS que je dois POST au serveur et je ne trouve aucune utilité dans jQuery qui enveloppe la fonction JSON.stringify (). 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 supportent, mais autrement suis obligé de revenir à l'aide des scripts JSON de Crockford.

Y at-il intégré avec jQuery qui gère JSON encodage et le décodage qui prend la place des scripts Crockford?

Était-ce utile?

La solution

Vous pouvez vérifier cela: http://www.json.org/js.html

Autres conseils

Vous pouvez utiliser "fermeture Library" (Google) pour faire un codeur / décodeur JSON croix navigateur.

Il suffit d'aller à http://closure-compiler.appspot.com/

et insérez ce qui suit dans le champ de texte, puis cliquez sur « compiler »:

// ==ClosureCompiler==
// @compilation_level ADVANCED_OPTIMIZATIONS
// @output_file_name default.js
// @use_closure_library true
// ==/ClosureCompiler==

goog.require('goog.json');
if (!window['JSON']) window['JSON']={};
if (typeof window['JSON']['stringify'] !== 'function') window['JSON']['stringify']=goog.json.serialize;
if (typeof window['JSON']['parse'] !== 'function') window['JSON']['parse']=goog.json.parse;

jQuery peut décoder les chaînes JSON nativement avec jQuery.parseJSON() .

Pour le codage bien, je ne sais d'un plug-in: jquery-json

jQuery ne ne fournit pas pas besoin en interne et donc cette fonctionnalité une méthode pratique pour le faire.

JSON.stringify () est la norme et recommandé à titre d'codant pour un objet à une représentation de chaîne JSON de cet objet. Il est une méthode de l'objet natif JSON dans de nombreux navigateurs, et il est fournit un moyen de vous utilisez json2.js recommandé (https://github.com/douglascrockford/JSON-js).

Pour construire sur la réponse de Stewe, compilateur de fermeture avec Avancé activé vous donne un script qui pollue l'espace de noms global avec un groupe d'une variables lettre. Donc, je conclurai simplement 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.toString.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 string: "+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 "string":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;e<f;e++)c.push(d),d=b[e],j(a,a.a?a.a.call(b,""+e,d):d,c),d=",";c.push("]");break}c.push("{");f="";for(e in b)Object.prototype.hasOwnProperty.call(b,e)&&(d=b[e],"function"!=typeof d&&(c.push(f),l(e,c),c.push(":"), j(a,a.a?a.a.call(b,e,d):d,c),f=","));c.push("}");break;case "function":break;default:throw Error("Unknown type: "+typeof b);}}var m={'"':'\\"',"\\":"\\\\","/":"\\/","\u0008":"\\b","\u000c":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\x0B":"\\u000b"},n=/\uffff/.test("\uffff")?/[\\\"\x00-\x1f\x7f-\uffff]/g:/[\\\"\x00-\x1f\x7f-\xff]/g; function l(a,b){b.push('"',a.replace(n,function(a){if(a in m)return m[a];var b=a.charCodeAt(0),d="\\u";16>b?d+="000":256>b?d+="00":4096>b&&(d+="0");return m[a]=d+b.toString(16)}),'"')};window.JSON||(window.JSON={});"function"!==typeof window.JSON.stringify&&(window.JSON.stringify=i);"function"!==typeof window.JSON.parse&&(window.JSON.parse=h); })();

Maintenant, vous pouvez appeler:

var JSONString = JSON.stringify({name: 'value'});

Souvent, la fonction JSON.stringify () n'est pas nécessaire lors de l'utilisation de jQuery. Prenons par exemple le cas de l'utilisation commune ajax javascript pour envoyer des données au serveur, jquery a intégré des fonctions pour gérer ceci: (exemples 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 envoyées javascript est sérialisé par jQuery automatiquement.

La sérialisation dans ces cas ne sont pas les mêmes que JSON.stringify (), au lieu des données est sérialisé dans une chaîne de requête HTML (voir: http://en.wikipedia.org/wiki/Query_string#Structure ).

Cependant, cette forme de sérialisation est très bien pour la plupart des applications (mais pas tous)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top