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也不久,一些个人看法,如有不对欢迎指正。

相关文章

Moondy 发表于 2008-12-31 6,388 Views | 类别: Flash/AS3

3条留言 立即发表评论

  1. #1匿名 @ 2011-3-8 13:42 回复

    :icon02 :icon07 :icon16 :icon23 :icon05

  2. #2handy @ 2011-10-8 18:11 回复

    :icon07 旁边的那个flash特效怎么写啊?

    • Moondy @ 2011-11-1 15:16 回复

      wp的一个插件而已

评论

:icon07 :icon02 :icon16 :icon23 :icon37 :icon05 :icon38 :icon35 more »
(Ctrl + Enter)