[翻译]Mozilla的JSON

JSON

原文地址:https://developer.mozilla.org/en-US/docs/JSON

已经提交至Mozilla,地址是:https://developer.mozilla.org/zh-CN/docs/JSON

译者能力有限,欢迎拍砖

感觉这个文章有些地方已经超越我的能力了,很难翻译成人话~~别的不说了,拍砖吧亲们~~

不过话说回来感觉这文章看的人应该不多~

正文开始

JSON (JavaScript Object Notation)

JSON (JavaScript Object Notation) 是一个数据交换格式。它非常的接近于JavaScript语法的子集,尽管它不是一个严格的子集。(详细见JavaScript参考中的JSON。)当你在写任何基于JavaScript的应用程序的时候它都是非常有用的,包括网站和浏览器拓展。举个例子,也许你会把用户信息储存成JSON格式并放到cookie中,或者你会把拓展偏好(extension preferences)储存成为JSON格式在一个字符串值(string-valued)的浏览器偏好(browser preference)中。

JSON 的才能是由数、布尔,字符串,null以及数组(按照值的顺序排列)甚至对象(string-value mappings)这些值的表示来组成的(或者其他的数组或对象)。它不能与生俱来的用来表示更负载的数据类型,比如函数、正则表达式,日期等等。(日期 对象默认会被序列化成为一个ISO格式的包含日期的字符串,因此它们不往返行程(round-trip),这个信息不会完全丢失。)如果你需要存储这些 值,你可以在它们被序列化的时候把它们变成值,或者先把他们反序列化(deserialization),去使JSON可以表现这些后加的数据类型。

文档

JSON对象(JSONobject)

JSON对象包含一些把值转换成JavaScript Object Notation (JSON)和一些转换JSON成为值的方法(methods)。

使用本地JSON(Using native JSON

这个文章覆盖了在Gecko 1.9.1被添加的ECMAScript 5遵从本地JSON对象。

JSONPath

JSONPath是使用类似XPath语法去查询JSON结构。

它不是一个标准,但是它确实代表了在不需要转换或者从XML的前提下直接查询JavaScript结构。

Downloading JSON and JavaScript in extensions

A common practice found in many extensions is using XMLHttpRequest (or some other mechanism) to download JavaScript or JSON (they are different) from a remote website. Once the content has been downloaded, the extension authors proceed to use eval()to decode the string content into JavaScript objects, which is a dangerous practice and will not, in fact, pass an AMO review. This article shows how to avoid it.

JXON

JXON 代表无损的 Javascript XML Object Notation,它是一个用来定义使用xml表示JavaScript对象树的署名。

JSON.stringifymethod

Convert a value to JSON,optionallyreplacing values if a replacer function is specified, or optionally including only the specified properties if a replacer array is specified.

JSON.parsemethod

把字符串解析成为JSON,选择性的把值转换成JSON。

查看全部...

社区

  • 查看Mozilla论坛...


工具

查看全部...

相关话题

AJAX, JavaScript, XUL

通过使用JavaScript的JSON 对象使用JSON

最简单的使用JSON的办法是通过标准JavaScript中的JSON 对象来使用。使用JSON.stringify去序列化一个JSON值,以及使用JSON.parse去反序列化一个JSON值。

例子,使用JSON.stringify()方法去序列化一个JavaScript对象:

var foo = {};
foo.bar = "new property";
foo.baz = 3;

var JSONfoo = JSON.stringify(foo);

JSONfoo现在变成了{"bar":"new property","baz":3}. 如果你想使JSONfoo再变回一个 JavaScript 对象,你只需要做:

var backToJS = JSON.parse(JSONfoo);

更多的信息你可以看JSON对象文档

toJSON()方法

如果一个对象定义了一个toJSON()方法,JSON.stringify会调用这个方法去终止这个JSON对象的转换,例子:

x = {}; 
x.foo = "foo";  
x.toJSON = function() { return "bar"; }; 
var json1 = JSON.stringify(x);

json1现在的结果是 '"bar"'。

译者注(下图是我在Chrome Console下做的):

 

限制

你不能序列化一个含有functions的对象,JSON规定这是不被允许的。例子:

foo.qwerty = function(){alert('foobar');}; 
foo.qwerty() 
var JSONfoo = JSON.toString(foo);

它会抛出:TypeError on line XXX: No JSON representation for this object!

通过nsIJSON使用JSON

3.5版本之前的Firefox并不原生支持JSON,所以唯一的办法是使用nsIJSON组件,从Firefox 3开始生效。使用nsIJSON的encode和decode方法来编解码。这些方法对于JSON对象来说并不足够强大,他们只支持那些是对象或者是数组的值,并不支持字符串,布尔,数字或者null。(这些值仅仅会被变成数组或对象的时候才能被支持:数字5是不会被支持的,但是{ "value": 5 }可以。)

因为nsIJSON对于JSON对象来说,并不足够强大,它的encode和decode方法从Firefox 7起已经被移除了。开发需要选择使用JSON对象来代替。

下面的代码是使用nsIJSON序列化一个JavaScript对象:

var Ci = Components.interfaces;
var Cc = Components.classes;

var foo = {};
foo.bar = "new property";
foo.baz = 3;

var nativeJSON = Cc["@mozilla.org/dom/json;1"].createInstance(Ci.nsIJSON);
var JSONfoo = nativeJSON.encode(foo);

现在JSONfoo变量变成了字符串{"bar":"new property","baz":3}。把JSONfoo再变成JavsScript对象,只需要做:

var backToJS = nativeJSON.decode(JSONfoo);

其他使用JSON的方法

理论上讲,是可以用eval去使用JSON的(但仅仅是反序列化一个对象,而不是把一个对象序列化成为一个字符串)或者是使用json2.js,不是一个好办法。用eval去解析JSON是不安全的,因为eval允许比JSON更多的语法(会使代码随意的执行)。对于json2.js,它的问题是它在构造对象的时候向其中添加了一些方法,比如Object.prototype,它非常有可能按照某种不确定的方式破坏代码。你几乎永远都需要使用先前方法中的一个去用来表述JSON。

还可以看

转载于:https://my.oschina.net/wchen/blog/131466

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值