Pregunta JSON stringify falta de jQuery 1.4.1?


Aparentemente jQuery tiene la capacidad de decodificar un objeto o cadena dado en un objeto JSON. Sin embargo, tengo un objeto JS que necesito enviar de regreso al servidor y no encuentro utilidad en jQuery que envuelva 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 usarlo de forma nativa en los navegadores que lo soportan, pero de lo contrario me veo obligado a recurrir al uso de las secuencias de comandos JSON de Crockford.

¿Hay algún built-in con jQuery que maneje la codificación JSON y la descodificación que toma el lugar de los scripts de Crockford?


74
2018-02-17 00:13


origen


Respuestas:


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


30
2018-02-17 00:15



Puede usar "Biblioteca de cierres" (Google) para crear un codificador / decodificador JSON de navegador cruzado.

Solo ve a http://closure-compiler.appspot.com/

e inserte lo siguiente en el campo de texto, luego presione "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;

26
2017-10-17 20:57



jQuery puede decodificar cadenas JSON de forma nativa con jQuery.parseJSON().

Para la codificación, solo sé de un complemento: jquery-json 


14
2018-02-17 00:19



jQuery no necesita esta funcionalidad internamente y, por lo tanto, no proporciona un método conveniente para hacerlo.

JSON.stringify () es la forma estándar y recomendada de codificar un objeto a una representación de cadena JSON de ese objeto. Es un método del objeto JSON nativo en muchos navegadores, y se recomienda que use json2.js (https://github.com/douglascrockford/JSON-js) para proporcionar una alternativa.


3
2018-03-13 00:39



Para construir sobre la respuesta de Stewe, cierre el compilador con Avanzado activada le proporciona una secuencia de comandos que contamina el espacio de nombres global con un conjunto de variables de una letra. Así que, simplemente lo envuelvo en una llamada a 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 puedes llamar:

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


2
2018-03-14 19:20



A menudo, la función JSON.stringify () no es necesaria cuando se utiliza jQuery. Tomemos, por ejemplo, el caso común de usar ajax para enviar datos de JavaScript al servidor, jquery tiene funciones incorporadas 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 de javascript enviados son serializados por jQuery automáticamente.

La serialización en estos casos no es lo mismo que JSON.Stringify (), sino que los datos se serializan en una cadena de consulta html (ver: http://en.wikipedia.org/wiki/Query_string#Structure)

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


1