JSON简析以及AS3中JSON类的应用
以往在做FLASH数据交互的时候,大多用的是XML,或者直接通过html传递参数来交互。前不久接触了一下JSON,研究了一下,觉得还是值得写点东西的。
json是JavaScript Object Notation的简写,是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它是基于JavaScript(Standard ECMA-262 3rd Edition – December 1999)的一个子集,也就是说他是来自于javascript的东西。因为现在ajax的流行,大部分网站会采用ajax的模式和构架,那么json会是一个数据传输的首选(文本方式太简单,要是大数据量的时候无法理解,xml的方式数据量大,在解析的时候会增加服务器负担),那么要是一个网站从ajax构架的基础上出一个flex/flash版的界面的时候使用json会最少地减少服务器端的程序改动。
JSON的结构写法很容易理解,它原本就是以数据量小和清晰的数据格式而著称的。但是在AS中使用json其实并不是一个必须或是很好的选择,很多时候我们还是会用XML,因为AS对XML的解析已经很好了。但是多了解一种数据交互形式,特别是如此简单的JSON,当然是有益无害的咯。
在这里想说些题外话,很多人喜欢拿XML跟JSON的可读性以及解析来做比较,其实一个写法优秀的XML也不会比JSON差,举个例子来说吧,现假设有一个用户数据包括:用户名、密码、所在部门、性别、年龄。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 用XML表示如下: <?xml version="1.0" encoding="utf-8"?> <user> <name>张三 </name> <password>123456</password> <department>技术部</department> <sex>男</sex> <age>30</age> </user> 对于这样一个XML来说,如果数据量大了的确让人头昏眼花,也不好处理,但是如果我们转化成下面这种形式的话: <?xml version="1.0" encoding="utf-8"?> <user> <people name="张三" password="123456" depattment="技术部" sex="男" age="30" /> </user> 再跟相应该的JSON来比较: {"name":"张三","password":"123456","department":"技术部","sex":"男","age":"30"} 也不会相差太多咯。 |
下面再说说adobe的官方的JSON类的用法吧。
1、服务器端来的json
语法:JSON.decode(String)
从服务器端获得的应该是一个字符串,把它存入一个变量,然后通过JSON.decode(String)方法后,就可以通过点语法来访问这些值。下面是一个网络上找来的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 | var serverJSON:String = '{ "programmers":{ "firstName": "Brett", "lastName": "McLaughlin", "email": "brett@newInstance.com" }, "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" }, "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }], "authors": "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" }, "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" }, "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }],"musicians": "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }]}' var s:Object = JSON.decode(serverJSON); //开始使用 trace(s.programmers[0].firstName);//输出:Brett |
2、本地对象做成JSON
语法:JSON.encode(Object)
其实也就是跟读取相反,创建一个对象然后输出而已了。你可以直接拼写JSON的字符串,也可以通过对象来创建了。
1 2 3 4 5 6 7 | import json.*; var myObject:Object = new Object(); myObject.ab = "adfsdf"; myObject.cd = Math.random(); trace(JSON.encode( myObject )); //输出:{"ab":"adfsdf","cd":0.0599129400216043} 这样就可以给服务器了。 |
本民工接触JSON也不久,一些个人看法,如有不对欢迎指正。
3条留言 立即发表评论
wp的一个插件而已