JSON stringify missing from jQuery 1.4.1?

后端 未结 6 961
野性不改
野性不改 2020-12-02 19:28

Apparently jQuery has the ability to decode a given object or string into a JSON object. However, I have a JS object that I need to POST back to the server and I find no uti

相关标签:
6条回答
  • 2020-12-02 20:05

    You can use "Closure Library" (Google) to make a cross browser JSON encoder/decoder.

    Just go to http://closure-compiler.appspot.com/

    and insert the following into the text field, then hit "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;
    
    0 讨论(0)
  • 2020-12-02 20:17

    Often the JSON.stringify() function is not required when using jQuery. Take for example the common case of using ajax to send javascript data to the server, jquery has built-in functions to handle this: (examples from 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 all the examples above the javascript data sent is serialized by jQuery automatically.

    The serialization in these cases is not the same as JSON.Stringify(), instead the data is serialised into a html query string (see: http://en.wikipedia.org/wiki/Query_string#Structure).

    However this form of serialization is fine for most (but not all) applications

    0 讨论(0)
  • 2020-12-02 20:18

    You might want to check this out: http://www.json.org/js.html

    0 讨论(0)
  • 2020-12-02 20:24

    jQuery can decode JSON strings natively with jQuery.parseJSON().

    For encoding though, i only know of a plugin : jquery-json

    0 讨论(0)
  • 2020-12-02 20:24

    jQuery does not need this functionality internally and thus does not provide a convenience method to do so.

    JSON.stringify() is the standard and recommended way of encoding an object to a JSON string representation of that object. It is a method of the native JSON object in many browsers, and it is recommended you use json2.js (https://github.com/douglascrockford/JSON-js) to provide a fallback.

    0 讨论(0)
  • 2020-12-02 20:28

    To build on stewe's answer, closure compiler with Advanced turned on gives you a script that pollutes the global namespace with a bunch of one letter variables. So, I just wrap it in an anonymous function call like so:

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

    Now you can call:

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

    0 讨论(0)
提交回复
热议问题