zoukankan      html  css  js  c++  java
  • JSON3-翻译(不当之处,请指正)

    http://bestiejs.github.io/json3/
    JSON 3 显示了两个功能:stringify():序列化一个javaScript值为一个JSON,和parse():将一个json字符串转换成一个JavaScript对象.这是对JSON2的一个嵌入式替换.这个函数完全遵照ECMAScript的规范描述.除了日期的序列化差异.JSON3没有使用eval和正则表达式.这里在过时和移动的环境里提供了很好的安全性和性能优势.

    对比JSON2 发生的改变:
    json3...
        1.正确的序列化原始包装对象。
        2.序列化环状结构时,抛出一个TypeError(JSON2直到递归调用堆栈溢出)
        3.利用功能测试,检测损坏的或不完整的原生JSON实现(JSON2只检查的本地函数的存在).测试只在运行时执行一次,所以有分析或序列化值时,没有额外的性能开销。
    相反,对比JSON2,JSON3没有的是...
        1.给Boolean, Number, and String 原型添加toJSON()方法.这些都不是任何标准的一部分,并且使 stringify()的设计实现变的多余.
        2.给 Date.prototype添加toJSON() or toISOString()方法.具体查下下面的日期.

    Date 序列化:
        1.JSON3偏离规范的重要途径之一:它并没有定义Date#toISOString() 或者 Date#toJSON()方法.这里保留了一般JS的兼容性,同时避免了污染本来的原型(prototypes).相反的,date序列化是有stringify()实现内部执行的.如果一个date对象没有定义传统的toJSON()方法,它被序列化为一个简单iso 8601 日期字符串.
        2.几个本地的Date#toJSON()方法生成日期时间字符串在规范上并不符合语法:例如,Safari4的所有版本以及JSON2,不能正确序列扩展的年.另外,JSON2和旧的实现省略了日期时间字符串毫秒.(在ES 5中是可选择的,在5.1中是必须要求的.)最后在 Safari 4和5的所有版本中,序列化一个无效的日期会产生一个"Invalid Date",而不是null;因为这些环境显示出其他序列化的错误,但是,JSON3将覆盖本地字符串化()实现。

    使用:
       页面展示:

    <script src="//cdnjs.cloudflare.com/ajax/libs/json3/3.3.2/json3.min.js"></script>
    <script>
      JSON.stringify({"Hello": 123});
      // => '{"Hello":123}'
      JSON.parse("[[1, 2, 3], 1, 2, 3, 4]", function (key, value) {
        if (typeof value == "number") {
          value = value % 2 ? "Odd" : "Even";
        }
        return value;
      });
      // => [["Odd", "Even", "Odd"], "Odd", "Even", "Odd", "Even"]
    </script>
    

    当在web浏览器中使用时,JSON3公开了一个额外的JSON3对象包含noConfict()和renlnContext()函数,以及别名以stringify()和parse()函数.
    noConfict()和renlnContext()函数:
        .JSON3.noConflict() 还原全局JSON对象的原始值,返回一个引用JSON3对象
        .JSON3.runInContext([context, exports])使用给定上下文对象初始化JSON3,(e.g., window, global, etc.), 或全局对象,如果忽略.如果指定了出口对象,stringify(), parse(), 和 runInContext() 函数将会附着它来代替一个新的对象.
    异步模块装载机:
        JSON3 被定义为一个匿名模块兼容RequireJS.js,curl.js和其他异步模块加载机.

    <script src="//cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.js"></script>
    <script>
      require({
        "paths": {
          "json3": "./path/to/json3"
        }
      }, ["json3"], function (JSON) {
        JSON.parse("[1, 2, 3]");
        // => [1, 2, 3]
      });
    </script>
    

    为了避免与第三方脚本的问题,JSON3导出到全局范围,即使在模块加载器中使用.如果这种行为是不希望的,JSON3.noConflict()可用于全局JSON对象恢复到其原始值。
    注:如果您打算使用JSON3旁边另一个模块,请不要简单地串连这些模块组合在一起,因为这将导致一个脚本重复定义调用,导致AMD装载机的错误。如果你需要为生产环境压缩文件,那么可以使用r.js来处理优化.

    CommonJS 环境:

    var JSON3 = require("./path/to/json3");
    JSON3.parse("[1, 2, 3]");
    // => [1, 2, 3]

    JavaScript 引擎:

    load("path/to/json3.js");
    JSON.stringify({"Hello": 123, "Good-bye": 456}, ["Hello"], " ");
    // => '{ "Hello": 123 }'


    兼容性:
        JSON3已经在web浏览器,CommonJS环境和JavaScript引擎.
        Web浏览器:
            1.IE6.0或者更高版本
            2.火狐1.0版本或者更高
            3.Safari2.0版本或者更高
            4.Opera7.02版本或者更高
            5.Mozilia1.0,Netscape6.2.3,SeaMonkey1.0或者更高版本.
        CommonJS环境:
            1.Node0.2.6或者更高版本
            2.RinqoJS0.4或者更高版本
            3.Narwhal0.3.2或者更高版本
        JavaScript引擎:
            1.Mozilia Rhino1.5R5或者更高版本
            2.WebKitJSC
            3.Google V8
            
    已知的不兼容:
        试图序列化参数对象可能会跨环境产生不一致的结果,由于规范版本的差异.作为一种变通方法,请首先转换参数对象到一个数组:JSON.stringify([].slice.call(arguments, 0)).

    所需的本地方法:
        JSON3假设下面的方法存在,并且和ECMAScript规范中的功能描述一样.
        
        The Number, String, Array, Object, Date, SyntaxError, and TypeError constructors.
        String.fromCharCode
        Object#toString
        Function#call
        Math.floor
        Number#toString
        Date#valueOf
        String.prototype: indexOf, charCodeAt, charAt, slice.
        Array.prototype: push, pop, join.

  • 相关阅读:
    jexboss-20170328 帮助信息
    clusterd-20151119 帮助信息
    XSStrike-20191220 帮助信息
    Astra-20190405 帮助信息
    InsightScan-20150320 帮助信息
    BBScan-20200419 帮助信息
    Tplmap-20210117 帮助信息
    HDU-5446 Unknown Treasure
    中国剩余定理学习笔记
    [BZOJ5042]LWD的分科岛
  • 原文地址:https://www.cnblogs.com/a198720/p/4176671.html
Copyright © 2011-2022 走看看