JSON扫盲帖 JSON.as类教程


Posted in Javascript onFebruary 16, 2009

补充内容:
如果json字符串是从html用FlashVars来传递参数时那么字符串中的第一个双引号(包括双引号)以后的内容就不会得到传送. 而adobe的官方json.as类包里解析josn对象中是少不了双引号的. 所以搞了半天只后用个字符串替换函数啦!
方法看另一篇文章:
html传带双引号的参数给flash解决方案
--------------------------------------------------------------------------------------
先看下面的转载内容吧! 前面这些是根据自己的需求的补充内容:
--------------------------------------------------------------------------------------
昨天发了json的AS3解析类,从大家的跟帖上来看,好多人还是不知道这个东西的,特建一个扫盲贴。
其实在AS中使用json其实并不是一个必须或是很好的选择,因为AS对xml的解析已经很不错了,但是为什么可以考虑使用json呢,有以下几点:
json是介于单纯的文本方式(如:firstName=Brett&lastName=McLaughlin&email=brett@newInstance.com)和xml(<request><firstName>Brett</firstName><lastName>McLaughlin</lastName><email>brett@newInstance.com</email></request>)中间的一种格式,他具有文本和xml的中性优势:数据量小和清晰的数据格式。
json是JavaScript Object Notation的简写,那么意思就是说他是来自于javascript的东西。因为现在ajax的流行,大部分网站会采用ajax的模式和构架,那么json会是一个数据传输的首选(文本方式太简单,要是大数据量的时候无法理解,xml的方式数据量大,在解析的时候会增加服务器负担),那么要是一个网站从ajax构架的基础上出一个flex/flash版的界面的时候使用json会最少地减少服务器端的程序改动。
服务器端现在有成熟的JSON解析代码(因为JSON运用太广泛了),那么在开发的时候也不用担心服务器端的解析。
ps:我怎么只能想到上面三点啊,会不会理由太少了?
JSON 是什么?
简单 JSON 示例
按照最简单的形式,可以用下面这样的 JSON 表示名称/值对:

{ "firstName": "Brett" }

复制代码这个示例非常基本,而且实际上比等效的纯文本名称/值对占用更多的空间:
firstName=Brett

复制代码但是,当将多个名称/值对串在一起时,JSON 就会体现出它的价值了。首先,可以创建包含多个名称/值对的记录,比如:
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" }

复制代码从语法方面来看,这与名称/值对相比并没有很大的优势,但是在这种情况下 JSON 更容易使用,而且可读性更好。例如,它明确地表示以上三个值都是同一记录的一部分;花括号使这些值有了某种联系。
值的数组
当需要表示一组值时,JSON 不但能够提高可读性,而且可以减少复杂性。例如,假设您希望表示一个人名列表。在 XML 中,需要许多开始标记和结束标记;如果使用典型的名称/值对(就像在本系列前面文章中看到的那种名称/值对),那么必须建立一种专有的数据格式,或者将键名称修改为 person1-firstName 这样的形式。
如果使用 JSON,就只需将多个带花括号的记录分组在一起:
{ "people": [ 
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" }, 
{ "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" }, 
{ "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" } 
]}

复制代码这不难理解。在这个示例中,只有一个名为 people 的变量,值是包含三个条目的数组,每个条目是一个人的记录,其中包含名、姓和电子邮件地址。上面的示例演示如何用括号将记录组合成一个值。当然,可以使用相同的语法表示多个值(每个值包含多个记录): { "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" } 
] 
}

复制代码这里最值得注意的是,能够表示多个值,每个值进而包含多个值。但是还应该注意,在不同的主条目(programmers、authors 和 musicians)之间,记录中实际的名称/值对可以不一样。JSON 是完全动态的,允许在 JSON 结构的中间改变表示数据的方式。
在处理 JSON 格式的数据时,没有需要遵守的预定义的约束。所以,在同样的数据结构中,可以改变表示数据的方式,甚至可以以不同方式表示同一事物。
ps:以上例子都是来自http://www.ibm.com/developerworks/cn/web/wa-ajaxintro10/,掌握 Ajax,自己懒,看人家有就顺便用了

当当当,我又回来了,上周忙这上班没顾上写用法,下面就介绍一下adobe的json类的用法。
上次发表的json类有问题(http://bbs.actionscript3.cn/thread-1625-1-1.html),因为我也是从别人处下载的,谁知道是一个半成品。望大家别生气啊,建议管理员给删除了!
这次是adobe的官方的类,我修改了一下包,这次就可以用了。
下面是教程,比较简单:
1、服务器端来的json
怎么样获得服务器端的json我就不说了吧(就是通讯),那么得到的应该是一个字符串,存入变量serverJSON,使用方式如下:

import json.*; 
var json:Object = new Object(); 
json = JSON.decode(serverJSON);

json就是一个对象了,简单吧。
举一个例子:
上面的JSON的一段代码:

{ "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" } 
] 
}

存入变量:serverJSON
代码:
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

不是吧这么简单。其实转变后就成为一个对象了,可以通过点语法来访问这些值了。XML靠边去。
2、本地对象做成JSON
你要是能自己拼出JSON字符串也可以,不过我们是在面向对象的世界啊,那么我们都是对象啊,到时候对象直接就可以来用了。
举一个例子:

import json.*; 
var myObject:Object = new Object(); 
myObject.ab = "adfsdf"; 
myObject.cd = Math.random(); 
trace(JSON.encode( myObject ));//输出:{"ab":"adfsdf","cd":0.0599129400216043}

这样就可以给服务器了。
总结:就两个方法,JSON.decode(String),JSON.encode(Object),有这么简单的方式实现传输量小,而且简单的数据格式,我们为什么还不用呢?
其实XML自然也有他自己的强势,当一个结构复杂的数据结构出现的时候,这个时候JSON就很难搞定了,XML就是首选了。
Javascript 相关文章推荐
页面中iframe相互传值传参
Dec 13 Javascript
为调试JavaScript添加输出窗口的代码
Feb 07 Javascript
JSON字符串转JSON对象
Jul 31 Javascript
js中 javascript:void(0) 用法详解
Aug 11 Javascript
jQuery采用连缀写法实现的折叠菜单效果
Sep 18 Javascript
深入理解JS addLoadEvent函数
May 20 Javascript
jQuery层次选择器用法示例
Sep 09 Javascript
微信小程序 rpx 尺寸单位详细介绍
Oct 13 Javascript
基于vue2.0+vuex的日期选择组件功能实现
Mar 13 Javascript
jQury Ajax使用Token验证身份实例代码
Sep 22 Javascript
详解用js代码触发dom事件的实现方案
Jun 10 Javascript
JavaScript undefined及null区别实例解析
Jul 21 Javascript
动态为事件添加js代码示例
Feb 15 #Javascript
Ext JS Grid在IE6 下宽度的问题解决方法
Feb 15 #Javascript
javascript Ext JS 状态默认存储时间
Feb 15 #Javascript
Javascript 获取链接(url)参数的方法
Feb 15 #Javascript
JavaScript 获得选中文本内容的方法
Feb 15 #Javascript
检测是否已安装 .NET Framework 3.5的js脚本
Feb 14 #Javascript
Javascript 跨域访问解决方案
Feb 14 #Javascript
You might like
php 按指定元素值去除数组元素的实现方法
2011/11/04 PHP
php中常用字符串处理代码片段整理
2011/11/07 PHP
PHP实现自动识别Restful API的返回内容类型
2015/02/07 PHP
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
2015/11/30 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
2016/03/21 PHP
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
JavaScript中5种调用函数的方法
2015/03/12 Javascript
js实现鼠标划过给div加透明度的方法
2015/05/25 Javascript
三个js循环的关键字示例(for与while)
2016/02/16 Javascript
浅析script标签中的defer与async属性
2016/11/30 Javascript
JS前端笔试题分析
2016/12/19 Javascript
微信小程序 引用其他js文件实现代码
2017/02/22 Javascript
Jquery把获取到的input值转换成json
2017/05/15 jQuery
JS实现移动端判断上拉和下滑功能
2017/08/07 Javascript
浅谈Koa2框架利用CORS完成跨域ajax请求
2018/03/06 Javascript
微信小程序实现倒计时调用相机自动拍照功能
2018/06/10 Javascript
node thread.sleep实现示例
2018/06/20 Javascript
qrcode生成二维码微信长按无法识别问题的解决
2019/04/04 Javascript
vue h5移动端禁止缩放代码
2019/10/28 Javascript
[04:36]DOTA2国际邀请赛 ti3精彩集锦
2013/08/19 DOTA
python用ConfigObj读写配置文件的实现代码
2013/03/04 Python
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
Python中给List添加元素的4种方法分享
2014/11/28 Python
Python保存MongoDB上的文件到本地的方法
2016/03/16 Python
Python 获得13位unix时间戳的方法
2017/10/20 Python
python实现栅栏加解密 支持密钥加密
2019/03/20 Python
python和mysql交互操作实例详解【基于pymysql库】
2019/06/04 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
野兽派官方旗舰店:THE BEAST 野兽派
2016/08/05 全球购物
入党积极分子学习两会心得体会范文
2014/03/17 职场文书
2014年教师业务学习材料
2014/05/12 职场文书
作风转变心得体会
2014/09/02 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
个人专业技术总结
2015/03/05 职场文书
2015年上半年党建工作总结
2015/03/30 职场文书
结婚典礼主持词
2015/06/29 职场文书