Pregunta

Al parecer jQuery tiene la capacidad de decodificar un objeto o una cadena dada en un objeto JSON. Sin embargo, tengo un objeto JS que necesita para enviar de vuelta al servidor y no he hallado utilidad en jQuery que envuelve la función JSON.stringify (). Esa función se encuentra en Chrome, Safari 4, FF3.6, e IE8, pero no se encuentra en los navegadores anteriores. Puedo utilizar de forma nativa en los navegadores que lo soportan, pero por lo demás estoy obligado a caer de nuevo a usar las secuencias de comandos de JSON Crockford.

¿Hay alguna integrada con jQuery que se encarga de la codificación y decodificación JSON que toma el lugar de los guiones Crockford?

¿Fue útil?

Solución

Es posible que desee comprobar esto: http://www.json.org/js.html

Otros consejos

Puede utilizar "Biblioteca de Cierre" (Google) para hacer un navegador cruz JSON codificador / decodificador.

Sólo tienes que ir a http://closure-compiler.appspot.com/

e introduzca lo siguiente en el campo de texto, después haga clic en "Compilar":

// ==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 puede decodificar cadenas JSON nativa con jQuery.parseJSON() .

Para la codificación sin embargo, yo sólo sé de un plugin: jquery json-

jQuery no necesita esta funcionalidad interna y por lo tanto no proporciona un método de conveniencia para hacerlo.

JSON.stringify () es el estándar y el modo de codificación de un objeto a una representación de cadena JSON de ese objeto recomendado. Es un método del objeto JSON nativo en muchos navegadores, y se recomienda que utilice json2.js (https://github.com/douglascrockford/JSON-js) para proporcionar un repliegue.

Para construir sobre la respuesta de Stewe, compilador de cierre con Avanzado encendido le da un script que contamina el espacio de nombres global con un montón de variables de una letra. Por lo tanto, sólo lo envuelve en una llamada de función anónima, así:

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

Ahora se puede llamar a:

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

A menudo la función JSON.stringify () no es necesaria para utilizar jQuery. Tomemos por ejemplo el caso común de utilizar ajax javascript para enviar los datos al servidor, jQuery se ha incorporado en funciones para manejar esto: (ejemplos 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);
});

En todos los ejemplos anteriores los datos javascript enviados se serializa por jQuery automáticamente.

La serialización en estos casos no es lo mismo que JSON.stringify (), en lugar de los datos es de serie en una cadena de consulta HTML (ver: http://en.wikipedia.org/wiki/Query_string#Structure ).

Sin embargo, esta forma de serialización está muy bien para la mayoría (pero no todas) las aplicaciones

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top