Domanda

A quanto pare jQuery ha la capacità di decodificare un dato oggetto o una stringa in un oggetto JSON. Tuttavia, ho un oggetto di JS che ho bisogno di palo al server e trovo alcuna utilità in jQuery che avvolge la funzione JSON.stringify (). Tale funzione si trova in Chrome, Safari 4, FF3.6, e IE8 ma non si trova nei browser precedenti. Posso usarlo in modo nativo nei browser che lo supportano, ma per il resto sono costretto a ripiegare per l'utilizzo di script JSON di Crockford.

C'è qualche built-in con jQuery che gestisce JSON codifica e decodifica che prende il posto degli script Crockford?

È stato utile?

Soluzione

Si potrebbe voler controllare questo fuori: http://www.json.org/js.html

Altri suggerimenti

È possibile utilizzare "Closure Library" (Google) per fare un cross browser JSON encoder / decoder.

Basta andare su http://closure-compiler.appspot.com/

e inserire il seguente nel campo di testo, poi ha colpito "Compila":

// ==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 in grado di decodificare le stringhe JSON in modo nativo con jQuery.parseJSON() .

Per la codifica, però, so solo di un plugin: jquery-JSON

jQuery non ha bisogno di questa funzionalità internamente e quindi non fornisce un metodo comodo per farlo.

JSON.stringify () è lo standard e raccomandato modo di codifica di un oggetto in una rappresentazione stringa JSON di tale oggetto. Si tratta di un metodo dell'oggetto nativo JSON in molti browser, e si consiglia di utilizzare json2.js (https://github.com/douglascrockford/JSON-js) per fornire un ripiego.

Per costruire sulla risposta di stewe, compilatore di chiusura con Avanzate acceso ti dà uno script che inquina lo spazio dei nomi globale con un gruppo di variabili una lettera. Allora, ho appena avvolgerla in una chiamata di funzione anonima in questo modo:

(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); })();

Ora si può chiamare:

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

Spesso la funzione JSON.stringify () non è necessaria quando si utilizza jQuery. Prendiamo ad esempio il caso comune di utilizzare Ajax per inviare javascript dati al server, jQuery è dotato di funzioni per gestire questo: (esempi da 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);
});

In tutti gli esempi sopra i dati javascript inviati viene serializzato da jQuery automaticamente.

La serializzazione in questi casi non è la stessa di JSON.stringify (), invece il dato viene serializzato in una stringa di query html (vedi: http://en.wikipedia.org/wiki/Query_string#Structure ).

Tuttavia questa forma di serializzazione va bene per la maggior parte delle applicazioni (ma non tutti)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top