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"], "\t");
// => '{\n\t"Hello": 123\n}'

兼容性:
    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.

转载于:https://www.cnblogs.com/a198720/p/4176671.html

JSON3-翻译(不当之处,请指正)相关推荐

  1. linux系统源配置(根据自己理解编写,不当之处,敬请指教)

    大家都知道linux源,如centos.federal.redhat等系统,在软件安装或更新时是很麻烦的,虽然提供了yum命令来像ubuntu那样解决软件包之间的依赖性问题,但是如果源设置的不好仍然是 ...

  2. 谐振频率、截止频率、并联谐振、串联谐振、容抗、感抗计算公式,红色字体标注理解是否正确?如果不对,请指正

    谐振频率.截止频率.并联谐振.串联谐振.容抗.感抗计算公式,红色字体标注理解是否正确?如果不对,请指正

  3. 最适合小白的Odoo12框架详解(更新完毕!!!有错请指正)

    文章目录 前言 一.准备工作 1.python安装 2.PyCharm安装 3.PostgreSQL数据库安装 4.准备Odoo源代码 5.安装虚拟环境 6.安装虚拟环境管理包 7.配置虚拟环境安装位 ...

  4. 官方翻译不当导致的PowerShell运行失败一例

    今天我在PowerShell.com看到一篇文章,是关于Gridview的应用,觉得挺好,决定自己尝试一下.但是实际操作的时候却失败了,然后开始了漫长的排错. http://powershell.co ...

  5. 【四分之四拍】四分之四拍每拍实际占多长时间?【用最理科的方式解释音乐里的这些玩意,不对之处欢迎指正】

    文末具体例子完了有通用公式 首先,需要明确一下,每首音乐都有个这么个东西 那个1=D就不管了,是音调的偏移,与速度时间无关 后面需要注意的就是这个4/4(其他曲谱也许6/8,3/4等等,为了方便描述区 ...

  6. 学习c++的第一天,如有不妥之处请见谅

    新手小白qwq qwq如果有不对的地方还请各位指点一下qwq 程序源文件命名约定: 在大多数系统中,源文件的名字以一个后缀为结尾. 后缀:一个句点后接一个或多个字符组成. 以c++为例,不同编译器使用 ...

  7. 交换机的linux测试脚本,更新网络设备巡检脚本,各位大神可以看看,如有不足,请指正!...

    [Visual Basic] 纯文本查看 复制代码params=str.split(" "); objTab.Session.Connect("/telnet " ...

  8. 纯正价格正则表达式,请指正

    preg_match('/^([1-9]{1}[\d]{0,11})(\.\d{1,2})?$|^0{1}\.([1-9]{1}|(?!00)\d{2})$/','0.01'); 转载于:https: ...

  9. java调用notify方法_Java线程,下面程序不知怎么调用notify方法唤醒test1,请指正

    //第一你的理解假如你想让两个线程,同步,需求一个联络,即:同步锁!加上就能够了! //同步锁方法许多,我在这里用简略的吧! //需求一个同步锁,目标有必要仅有,用单例,或静态class都能够! // ...

  10. idea插件Translate 谷歌无法翻译 TKK失败,请检查网络连接

最新文章

  1. struts2中welcome-fileindex.action/welcome-file直接设置action,404的解决方案
  2. 2014目标!!!!
  3. android:allowBackup=true 数据备份(adb backup)+查看(abe unpack backup.ab backup.tar)+恢复(adb re)
  4. php mysql 中文_PHP连接MySQL查询结果中文显示乱码解决方法
  5. ThreadLocal初识
  6. oracle去除首个字符,oracle如何去除字符串中的重复字符
  7. 分布式 NewSQL 数据库TiDB 3.1.0 版本发布,修复多项问题
  8. 通过python操作GeoLite2-City.mmdb库将nginx日志访问IP转换为城市写入数据库
  9. 2016域服务器自助修改密码,自助密码重置工具
  10. 超低功耗CMOS 16Mbit SRAM
  11. 中国天气预报数据API收集
  12. windows中Appium-desktop配合安卓模拟器的完美使用
  13. New Bing怼人、说谎、PUA,ChatGPT已经开始胡言乱语了
  14. 数据挖掘-关联分析频繁模式挖掘Apriori、FP-Growth及Eclat算法的JAVA及C++实现
  15. iconfont多色图标的使用方法
  16. 嵌入式Linux自学笔记(二)——文件IO
  17. Cocostudio学习笔记(2) Button + CheckBox
  18. Linux TC 流量控制与排队规则 qdisc 树型结构详解(以HTB和RED为例)
  19. 格灵深瞳IPO获同意:毛利率远高于行业均值,营收增速开始下滑
  20. Arduino ESP8266固件bin升级四种方法

热门文章

  1. clickhouse分布式DDL查询
  2. clickhouse时间日期函数
  3. lua 面向对象入门
  4. spark StandAlone模式下的作业提交流程
  5. Zephyr下计算耗时
  6. 关于win10的path系统变量
  7. 初接触RTMP流媒体实时消息传输协议
  8. 重新认识java-break和continue的标签你用过么
  9. JavaScript学习10 JS数据类型、强制类型转换和对象属性
  10. PHP设计模式——建造者模式