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"], "\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-翻译(不当之处,请指正)的更多相关文章
- 菜菜菜鸟学习之JavaWeb 入门1(自己的学习理解,不对之处请大神们多多指教啊)
一.相关基础知识 1.C/S(Client/Server)架构和B/S(Browser/Server)架构 首先说C/S架构,简单讲其实很常见,类似QQ等需要下载客户端的应用程序就是建立在C/S架构中 ...
- Weex小笔记(自己理解,有错请指正)
在Eros中,做的内容是封装了一些常用的框架,并且优化开发流程为将前端Vue文件打包出资源文件导入项目工程中(本地加载模式,需要注册文件.验证文件),然后原生移动端通过OC写module(功能模块类) ...
- 浅谈MySQL引擎(纯个人理解,如有错误请指正)
MySQL有很多引擎,MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(BerkeleyDB).EXAMPLE.FEDERATED...等等 比较常用的就是InnoDB和MyI ...
- 浅谈Objeact.clone克隆(纯个人理解,如有错误请指正)
现在先来看一下jdk给出的Object.clone源码和注释 /** * Creates and returns a copy of this object. The precise meaning ...
- 关于Springboot中dubbo整合注意的误区(不对之处请指出)
这是我的客户端配置! 这是生产的配置, 首先注意一下 scan 我之前尝试这样的客户端配置 然后 果断客户端不能注册接口 @Reference(version="1.0") ...
- Spring 容器的启动过程 流程图 自己看源码的梳理 如有错错误 请指正
- solrj-solr Guide 4.7
solrj是一个很容易使java应用程序和solr进行交互的一个API,solrj隐藏了很多连接Solr的细节,允许你的应用程序使用简单的高级方法和solr互动交流. solrj的核心就是 org.a ...
- nodejs学习之文件上传
最近要做个图片上传的需求,因为服务端春节请假回家还没来,所以就我自己先折腾了一下,大概做出来个效果,后台就用了nodejs,刚开始做的时候想网上找一下资料,发现大部分资料都是用node-formida ...
- 转-Android客户端和服务端如何使用Token和Session
http://www.software8.co/wzjs/yidongkaifa/6407.html 对于初学者来说,对Token和Session的使用难免会限于困境,开发过程中知道有这个东西,但却不 ...
随机推荐
- 开着奥迪做Uber司机是什么心态?
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- netdata linux环境下的安装
据说netdata监控很个性化,采用的显示方式也很漂亮,就来尝试安装.百度搜索到的安装教程的斑斑是1.0.顺藤摸瓜去wiki看了看,已经更新为1.4了,果断走起: 下载地址::https://gith ...
- c++字符串机理
在windows编程中,由于编码方式的不同和c与c++的不同而造成了许多复杂的有关字符串之间的转换 首先,windows编码方式有ANSCLL和UNICODE,前者是单字符的,后者是双字符的. 然后, ...
- jQuery在updatepanel中使用造成内存泄露
wijmo用户反馈了一个RadialGauge控件内存泄露的bug,采用chrome监控内存使用情况,发现明显的内存泄露,在前面的文章中我就发现了jQuery内存泄露的问题,这次再次发现此问题,自然就 ...
- 可执行jar包的maven配置
待整理 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.or ...
- XSLT模糊查询函数contains不区分大小写,for-each排序
代码如下: <xsl:for-each select="//NewDataSet/map/area[contains(translate(@alt, 'ABCDEFGHIJKLMNOP ...
- 设置文字在div中垂直居中,使用line-height
(从已经死了一次又一次终于挂掉的百度空间人工抢救出来的,发表日期2014-02-19) line-height 行间距 详细使用方法:http://www.w3school.com.cn/css/pr ...
- socat : Some useful commands
http://technostuff.blogspot.com/2008/10/some-useful-socat-commands.html MONDAY, OCTOBER 6, 2008 Some ...
- KVO机制
KVO,全称为Key-Value Observing,是iOS中的一种设计模式,用来监测对象的某些属性的实时变化情况并作出响应 首先,假设我们的目标是在一个UITableViewController内 ...
- Linux系统编程——进程间通信:命名管道(FIFO)
命名管道的概述 无名管道,因为没有名字,仅仅能用于亲缘关系的进程间通信(很多其它详情.请看<无名管道>).为了克服这个缺点.提出了命名管道(FIFO).也叫有名管道.FIFO 文件. 命名 ...