74 votes

JSON stringify manque de jQuery 1.4.1?

Apparemment, jQuery a la capacité de décoder un objet ou d'une chaîne de caractères dans un objet JSON. Cependant, j'ai un objet JS que j'ai besoin de publier sur le serveur et je ne trouve aucune utilité dans jQuery qui enveloppe le JSON.stringify() fonction. Cette fonction est trouvé dans google Chrome, Safari 4, FF3.6, et IE8, mais n'est pas trouvé plus tôt dans les navigateurs. Je peux l'utiliser en mode natif dans les navigateurs qui le supportent, mais sinon je suis obligé de revenir à l'utilisation d'Crockford JSON scripts.

Est-il intégré avec jQuery qui gère codage et décodage JSON qui prend la place de la Crockford scripts?

29voto

shinkou Points 3392

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

27voto

stewe Points 14623

Vous pouvez utiliser le bouton "Fermeture de la Bibliothèque" (Google) pour faire une croix navigateur JSON codeur/décodeur.

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

et insérez le code suivant 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;

14voto

Gaby aka G. Petrioli Points 85891

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

Pour l'encodage, si, je sais seulement d'un plugin : jquery json

3voto

Steve Points 8016

jQuery n'a pas besoin de cette fonction en interne et n'a donc pas de fournir une méthode pratique de le faire.

JSON.stringify() est la norme et de la façon recommandée de codage d'un objet à une chaîne JSON représentation de cet objet. C'est une méthode de l'objet JSON natif dans de nombreux navigateurs, et il est recommandé que vous utilisez json2.js (https://github.com/douglascrockford/JSON-js) afin de fournir une solution de repli.

2voto

crizCraig Points 2041

Pour construire sur stewe réponse de la fermeture du compilateur avec l' Avancée activée vous donne un script qui pollue l'espace de noms global avec un groupe d'une lettre de variables. Alors, je viens de l'envelopper dans un anonyme, un appel de fonction 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'});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X