Frage

Offenbar hat jQuery die Möglichkeit, ein bestimmtes Objekt oder eine Zeichenkette in ein JSON-Objekt zu entschlüsseln. Allerdings habe ich ein JS-Objekt, das ich zu POST zurück an den Server benötigen, und ich finde keinen Nutzen in jQuery, die die JSON.stringify () Funktion wickelt. Diese Funktion wird in Chrome, Safari 4, FF3.6 und IE8 gefunden, aber nicht in früheren Browsern. Ich kann es nativ in dem Browser verwenden, die sie unterstützen, aber ansonsten ist gezwungen zu verwenden Crockford JSON Skripte zurückgreifen.

Gibt es eine eingebaute mit jQuery, dass Griffe JSON Codierung und Decodierung, dass an die Stelle der Crockford Skripte nimmt?

War es hilfreich?

Lösung

Vielleicht möchten Sie dies überprüfen: http://www.json.org/js.html

Andere Tipps

Sie können die "Closure Library" (Google) verwenden, um ein Cross-Browser-JSON-Encoder / Decoder zu machen.

Gehen Sie einfach auf http://closure-compiler.appspot.com/

und fügen Sie die folgenden in das Textfeld, dann klicken Sie auf „Compile“:

// ==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;

kann jQuery JSON dekodieren Strings nativ mit jQuery.parseJSON() .

Für obwohl kodiert, ich weiß nur eines Plugins: jquery-json

jQuery nicht braucht diese Funktionalität intern und somit keine bequeme Methode bereitstellt, dies zu tun.

JSON.stringify () ist der Standard und die empfohlene Methode zur Kodierung eines Objekts zu einer JSON String-Darstellung des Objekts. Es ist eine Methode des nativen JSON-Objekts in vielen Browsern, und es wird empfohlen, Sie json2.js verwenden (https://github.com/douglascrockford/JSON-js) einen Rückfall zur Verfügung zu stellen.

zu bauen auf stewe Antwort, Verschluss-Compiler mit Erweitert eingeschaltet haben Ihnen einen Skript, dass verpestet der globale Namensraum mit einem Bündel von einem Buchstaben Variablen. Also, ich wickeln Sie es nur in einer anonymen Funktion Aufruf wie folgt:

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

Jetzt können Sie anrufen:

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

Oft ist die JSON.stringify () Funktion ist nicht erforderlich, wenn jQuery verwenden. Nehmen Sie zum Beispiel des gemeinsamen Fall von Ajax mit Javascript Daten an den Server zu senden, jquery hat eingebaute Funktionen zu handhaben: (Beispiele von 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 allen Beispielen über die JavaScript-Daten abgeschickt wird von jQuery serialisiert automatisch.

Die Serialisierung in diesen Fällen ist nicht die gleiche wie JSON.stringify (), statt die Daten in einen HTML-Abfrage-String serialisiert wird (siehe: http://en.wikipedia.org/wiki/Query_string#Structure ).

Allerdings ist diese Form der Serialisierung ist in Ordnung für die meisten (aber nicht alle) Anwendungen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top