Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery 1.4.1中缺少JSON字符串化?_Jquery_Json_Encode_Decode - Fatal编程技术网

jQuery 1.4.1中缺少JSON字符串化?

jQuery 1.4.1中缺少JSON字符串化?,jquery,json,encode,decode,Jquery,Json,Encode,Decode,显然jQuery能够将给定的对象或字符串解码为JSON对象。但是,我需要将一个JS对象发布回服务器,并且在jQuery中找不到封装JSON.stringify()函数的实用程序。该功能在Chrome、Safari 4、FF3.6和IE8中都可以找到,但在早期的浏览器中找不到。我可以在支持它的浏览器中本机使用它,但在其他方面,我不得不使用Crockford的JSON脚本 jQuery是否内置了一些处理JSON编码和解码的功能,以取代Crockford脚本?您可能需要查看以下内容: jQuery可以

显然jQuery能够将给定的对象或字符串解码为JSON对象。但是,我需要将一个JS对象发布回服务器,并且在jQuery中找不到封装JSON.stringify()函数的实用程序。该功能在Chrome、Safari 4、FF3.6和IE8中都可以找到,但在早期的浏览器中找不到。我可以在支持它的浏览器中本机使用它,但在其他方面,我不得不使用Crockford的JSON脚本


jQuery是否内置了一些处理JSON编码和解码的功能,以取代Crockford脚本?

您可能需要查看以下内容:

jQuery可以使用本机解码JSON字符串

但是对于编码,我只知道一个插件:

您可以使用“闭包库”(Google)来制作跨浏览器JSON编码器/解码器

并在文本字段中插入以下内容,然后点击“编译”:


jQuery在内部不需要此功能,因此不提供方便的方法

stringify()是将对象编码为该对象的JSON字符串表示形式的标准且推荐的方法。在许多浏览器中,它是本机JSON对象的一种方法,建议您使用json2.js(https://github.com/douglascrockford/JSON-js)提供退路

使用jQuery时,通常不需要JSON.stringify()函数。以使用ajax向服务器发送javascript数据的常见情况为例,jquery有内置函数来处理此问题:(示例来自)

在上面的所有示例中,jQuery自动序列化发送的javascript数据

这些情况下的序列化与JSON.Stringify()不同,而是将数据序列化为html查询字符串(请参阅: )


然而,对于大多数(但不是所有)应用程序来说,这种形式的序列化是很好的

以Stwee的答案为基础构建,打开Advanced的闭包编译器将为您提供一个脚本,该脚本使用一组单字母变量污染全局命名空间。因此,我只是将其包装在一个匿名函数调用中,如下所示:

(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);
})();
(函数(){
职能g(a){
var b=a的类型;
如果(“对象”==b)
如果(a){
如果(数组的实例)返回“数组”;
如果(对象的实例)返回b;
var c=Object.prototype.toString.call(a);
如果(“[对象窗口]”==c)返回“对象”;
如果(“[object Array]”==c | |“number”==a.length的类型和“undefined”!=a.splice的类型和“undefined”!=a.PropertyEnumerable的类型和a.PropertyEnumerable(“splice”))返回“Array”;
如果(“[对象函数]”==c | | |“未定义”!=a.call的类型和“未定义”!=a.PropertyEnumerable的类型和a.PropertyEnumerable(“调用”)返回“函数”
}否则返回“null”;
else if(“函数”==b&&“未定义”==a.call的类型)返回“对象”;
返回b
};
职能h(a){
a=”“+a;
测试(a)测试(a)测试(a)测试(a)测试(a)测试(a)测试(a)测试(a)替换(a)测试(a)测试(a)替换(a)测试(a)替换(a)测试(a)替换(a)测试(a)替换(a)替换(a)测试(a)替换(a)替换(a)替换(a)测试(a)替换(a)替换(a)替换(a)测试(a)替换(a)替换(a)替换(a)替换(a)替换(a)替换(替换(a)替换(a)测试(替换(替换)(替换(a)替换(替换)(替换)(替换)(a)测试(a)替换(替换)测试(a)替换(替换)(替换)(替换)(替换)替换)测试(替换)测试(替换)测试(替换)测试(a)测试(替换)(替换)测试)(替换)测试)(替换)测试(替换)测试(替换)测试(替换)测试)(替换)测试)(替换)测试)(替换(替换u2028\u2029]*\[)+/g,“”))试试看{
返回值(“+a+”)
}第(b)项捕获{}
抛出错误(“无效的JSON字符串:+a”);
}
职能i(a、b){
var c=[];
j(新k(b)、a、c);
返回c.join(“”)
}
函数k(a){
这个a=a
}
功能j(a、b、c){
开关(b型){
大小写“字符串”:
l(b,c);
打破
案例“编号”:
c、 push(isFinite(b)和&!isNaN(b)&b:“null”);
打破
案例“布尔”:
c、 推(b);
打破
案例“未定义”:
c、 推送(“空”);
打破
案例“对象”:
如果(null==b){
c、 推送(“空”);
打破
}
如果(“数组”==g(b)){
var f=b.长度;
c、 推动(“[”);
对于(var d=”,e=0;eb?d+=“000”:256>b?d+=“00”:4096>b&&(d+=“0”);
返回m[a]=d+b.toString(16)
}), '"')
};
window.JSON | |(window.JSON={});
“函数”!==typeof window.JSON.stringify&&(window.JSON.stringify=i);
“function”!==typeof window.JSON.parse&&(window.JSON.parse=h);
})();
现在您可以拨打:


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

类似帖子:也许我真的很笨,但这也让我大吃一惊。看起来JSON.org的脚本就是最好的选择。是的,jQuery没有向库中直接添加一个方法,这让人有点难过。我最终用闭包编译器缩小了JSON.js,并将它放在我正在工作的js文件的底部。这是我会这样做,但似乎没有必要。我一直在使用解决方案。对我来说效果很好。链接不再起作用。这个答案不会给出答案,因为它只是一个链接。@zcrar70,他特别要求一个
JSON.stringify
wrapper..除非你的命令
$.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);
});
(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);
})();