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.

JSON3-翻译(不当之处,请指正)的更多相关文章

  1. 菜菜菜鸟学习之JavaWeb 入门1(自己的学习理解,不对之处请大神们多多指教啊)

    一.相关基础知识 1.C/S(Client/Server)架构和B/S(Browser/Server)架构 首先说C/S架构,简单讲其实很常见,类似QQ等需要下载客户端的应用程序就是建立在C/S架构中 ...

  2. Weex小笔记(自己理解,有错请指正)

    在Eros中,做的内容是封装了一些常用的框架,并且优化开发流程为将前端Vue文件打包出资源文件导入项目工程中(本地加载模式,需要注册文件.验证文件),然后原生移动端通过OC写module(功能模块类) ...

  3. 浅谈MySQL引擎(纯个人理解,如有错误请指正)

    MySQL有很多引擎,MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(BerkeleyDB).EXAMPLE.FEDERATED...等等 比较常用的就是InnoDB和MyI ...

  4. 浅谈Objeact.clone克隆(纯个人理解,如有错误请指正)

    现在先来看一下jdk给出的Object.clone源码和注释 /** * Creates and returns a copy of this object. The precise meaning ...

  5. 关于Springboot中dubbo整合注意的误区(不对之处请指出)

    这是我的客户端配置! 这是生产的配置, 首先注意一下 scan   我之前尝试这样的客户端配置 然后  果断客户端不能注册接口 @Reference(version="1.0") ...

  6. Spring 容器的启动过程 流程图 自己看源码的梳理 如有错错误 请指正

  7. solrj-solr Guide 4.7

    solrj是一个很容易使java应用程序和solr进行交互的一个API,solrj隐藏了很多连接Solr的细节,允许你的应用程序使用简单的高级方法和solr互动交流. solrj的核心就是 org.a ...

  8. nodejs学习之文件上传

    最近要做个图片上传的需求,因为服务端春节请假回家还没来,所以就我自己先折腾了一下,大概做出来个效果,后台就用了nodejs,刚开始做的时候想网上找一下资料,发现大部分资料都是用node-formida ...

  9. 转-Android客户端和服务端如何使用Token和Session

    http://www.software8.co/wzjs/yidongkaifa/6407.html 对于初学者来说,对Token和Session的使用难免会限于困境,开发过程中知道有这个东西,但却不 ...

随机推荐

  1. 【MySQL】源码编译安装和配置MySql 5.5.32(单实例)

    [需求描述] 在CentOS环境中,通过编译源码的方式,安装并且配置“单实例”的MySQL5.5.32数据库. MySQL的安装目录为:/application/mysql-5.5.32 MySQL数 ...

  2. invoking gdb

    [invoking gdb] The most usual way to start gdb is with one argument, specifying an executable progra ...

  3. CCF 201403-1 相反数 (水题)

    问题描述 有 N 个非零且各不相同的整数.请你编一个程序求出它们中有多少对相反数(a 和 -a 为一对相反数). 输入格式 第一行包含一个正整数 N.(1 ≤ N ≤ 500). 第二行为 N 个用单 ...

  4. How Tomcat Works(十一)

    本文接下来分析tomcat的类载入器,tomcat需要实现一个自定义的载入器,而不能使用系统类载入器 (1)限制serlvet访问当前运行的java虚拟机中环境变量CLASSPATH指明的路径下的所有 ...

  5. OC:方法

    三种可见度 1.@public 被public 修饰的变量可以在外部(再声明一个新的类,也能访问) 和 该类的内部(在该类的.m文件内部)被访问,这样就可以在 main 函数中访问 @public 一 ...

  6. C:内存分配、内存中五大区

     1.内存的划分  (从高到低依次是: 栈区 . 堆区 .全局静态区 . 常量区 . 代码区 )栈区是系统自动回收,堆区是我们手动回收  2. 栈区   在函数内部定义的局部变量和数组.都存放在栈区, ...

  7. Rank() over(partition ... 分组统计的实例

    USE [NanFeng]GO/****** Object: StoredProcedure [dbo].[st_MES_RptMaterilSum] Script Date: 04/18/2016 ...

  8. vtk读取文件中点坐标[转]

    vtk基础编程(2)-读取数据文件中的坐标点 1. 案例说明 在实际计算中,常常需要大量的数据, 这个时候数据文件就必不可少, 例如 数据文件points.dat, 中存放了三个点的坐标, 0.0 0 ...

  9. DeleteDC() 与 ReleaseDC() 的区别 [转]

    DeleteDC 该函数删除指定的设备上下文环境(DC). 原型: BOOL DeleteDC(HDC hdc): 参数: hdc:设备上下文环境的句柄. 返回值: 成功,返回非零值:失败,返回零.调 ...

  10. 在类库中使用Session

    昨天在做优化网站代码的时候,突发奇想想将页面的代码和业务逻辑代码分离开.就是页面下的.cs文件只用于收集前台上的数据而业务处理都放到一些类库中.可是问题来了,在类库中是无法直接使用Session.在网 ...