json3中文文档|json3 js中文教程|解析
🚨 无人维护🚨
JSON 3 **已弃用**,**不再维护**。请不要在新项目中使用它,并迁移现有项目以使用原生的`JSON.parse` 和`JSON.stringify`。
感谢所有贡献补丁或发现它有用的人!❤️
JSON 3
JSON 3是旧 JavaScript 平台的 JSON polyfill。
关于
JSON是一种基于 JavaScript 语法的松散子集的独立于语言的数据交换格式。最初由Douglas Crockford推广,该格式在 ECMAScript 规范的第五版中标准化。2011 年 6 月批准的 5.1 版对与日期序列化相关的语法进行了一些修改。
JSON 3 公开了两个函数:stringify()
用于将JavaScript 值序列化为JSON,以及parse()
用于从 JSON 源字符串生成JavaScript 值。JSON 3 解析器使用递归下降而不是eval
正则表达式,这使得它在旧平台上比JSON 2更慢。这些函数的行为与 ECMAScript 规范中描述的完全一样,除了下面提到的日期序列化差异。
该项目与单元测试一起托管在 GitHub 上。它是BestieJS系列的一部分,该系列是一流的 JavaScript 库的集合,可促进跨平台支持、规范先例、单元测试和大量文档。
日期序列化
JSON 3 在一个重要方面偏离了规范:它没有定义Date#toISOString()
或Date#toJSON()
。这保留了 CommonJS 兼容性并避免污染本机原型。相反,日期序列化由stringify()
实现在内部执行:如果日期对象未定义自定义toJSON()
方法,则将其序列化为简化的 ISO 8601 日期时间字符串。
几个本机Date#toJSON()
实现产生不符合规范中概述的语法的日期时间字符串。在这些环境中,JSON 3 将覆盖本机stringify()
实现。文件中有一个问题使这些测试不那么严格。
部分日期序列化代码改编自date-shim
项目。
用法
网页浏览器
<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 浏览器中使用时,JSON 3 公开了一个JSON3
包含noConflict()
和runInContext()
函数的附加对象,以及stringify()
和parse()
函数的别名。
noConflict
和 runInContext
JSON3.noConflict()
恢复全局JSON
对象的原始值并返回对该JSON3
对象的引用。JSON3.runInContext([context, exports])
初始化JSON 3使用给定context
对象(例如,window
,global
等),或全球的对象,如果删去。如果exports
指定了一个对象,则stringify()
、parse()
和runInContext()
函数将附加到它而不是一个新对象。
异步模块加载器
JSON 3被定义为匿名模块为了兼容RequireJS,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>
为避免第三方脚本出现问题,即使与模块加载器一起使用,JSON 3 也会导出到全局范围。如果此行为不受欢迎,JSON3.noConflict()
可用于将全局JSON
对象恢复为其原始值。
注意:如果您打算将 JSON3 与另一个模块一起使用,请不要简单地将这些模块连接在一起,因为这会导致define
在一个脚本中进行多次调用,从而导致 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}'
兼容性
JSON 3已经测试与下面的Web浏览器,CommonJS的环境,和JavaScript引擎。
网页浏览器
- Windows Internet Explorer 6.0 及更高版本
- 谷歌浏览器19.0 及更高版本
- Mozilla Firefox 2.0 及更高版本
- Apple Safari 3.0 及更高版本
- Opera 8.54 及更高版本
- SeaMonkey 1.0 及更高版本
CommonJS 环境
JavaScript 引擎
已知的不兼容性
arguments
由于规范版本差异,尝试序列化对象可能会在不同环境中产生不一致的结果。作为一种变通方法,请转换arguments
第一对象到一个数组:JSON.stringify([].slice.call(arguments, 0))
。
必需的本地方法
JSON 3 假设存在以下方法,并且其功能如 ECMAScript 规范中所述:
- 的
Number
,String
,Array
,Object
,Date
,SyntaxError
,和TypeError
构造。 String.fromCharCode
Object#toString
Object#hasOwnProperty
Function#call
Math.floor
Number#toString
Date#valueOf
String.prototype
:indexOf
,charCodeAt
,charAt
,slice
,replace
.Array.prototype
:push
,pop
,join
.