`
junjie.li1985
  • 浏览: 50380 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

as3corelib的JSON类的简单应用

阅读更多

        as3corelib是一个开源的as库,里面有很多有用的工具类,其中里面的JSON类可以将AS的对象转换成JSON的格式。

 

        JSON类只有两个静态方法: encode 和 decode。

 

        encode方法接受一个AS对象作为参数,然后把对象转换成JSON格式的字符串;decode方法接受一个JSON格式
的字符串,返回一个AS对象。下面是JSON类的具体用法:

package {

	import com.adobe.serialization.json.JSON;

	

	import flash.display.Sprite;

	import flash.utils.describeType;



	public class CorelibEx extends Sprite

	{

		public function CorelibEx() {

			jsonTest();

		}

		

		private function jsonTest():void {

			var person:Person = new Person("Joseph", 23, "Male");

			var jsonStr:String = JSON.encode(person);//普通对象转换成JSON字符串格式

			trace("jsonStr = " + jsonStr);//输出jsonStr = {"age":23,"sex":"Male","name":"Joseph"}

			

			var jsonObj:* = JSON.decode(jsonStr);//JSON字符串转化为AS对象

			trace("Name: " + jsonObj.name, "Age: " + jsonObj.age, "Sex: " + jsonObj.sex);

			

			trace(describeType(person));

		}

	}

}



class Person {

	private var _name:String;

	private var _age:int;

	private var _sex:String;

	

	public function Person(name:String=null, age:int=-1, sex:String=null) {

		_name = name;

		_age = age;

		_sex = sex;

	}

	

	public function get name():String {

		return _name;

	}

	

	public function set name(name:String):void {

		_name = name;

	}

	

	public function get age():int {

		return _age;

	}

	

	public function set age(age:int):void {

		_age = age;

	}

	

	public function get sex():String {

		return _sex;

	}

	

	public function set sex(sex:String):void {

		_sex = sex;

	} 

}

 

        实践过程中发现,如果改对象是自定义对象,则一定要给对象的属性加上getter 和 setter 方法,否则转换得到的JSON字符串则为:{}。

 

        通过查看corelib中JSON类的源代码,发现JSON类在encode操作时,调用的是JSONEncoder类,该类首先会判断对象所属的类型,当发现对象为自定义类型(归入Object类型)时,调用objectToString方法,顾名思义,该方法将对象转换成字符串。该方法首先会调用flash.util.descriptType方法,这个方法是将一个AS对象用XML的方法来描述,例如,对象person的XML描述是:

<type name="CorelibEx.as$0::Person" base="Object" isDynamic="false" isFinal="false" isStatic="false">
  <extendsClass type="Object"/>
  <constructor>
    <parameter index="1" type="String" optional="true"/>
    <parameter index="2" type="int" optional="true"/>
    <parameter index="3" type="String" optional="true"/>
  </constructor>
  <accessor name="sex" access="readwrite" type="String" declaredBy="CorelibEx.as$0::Person"/>
  <accessor name="name" access="readwrite" type="String" declaredBy="CorelibEx.as$0::Person"/>
  <accessor name="age" access="readwrite" type="int" declaredBy="CorelibEx.as$0::Person"/>
</type>

        XML的根节点描述了该类的名称、基类、是否动态类、是否Final类、是否Static类,<constructor>块描述的是构造函数的内容,而<accessor>块则对应getter与setter方法。

 

        再看回objectToString方法,从下面一段代码得知,将JSONEncoder将AS对象转换成字符串时,处理的方法是读取对象的XML描述中的<accessor>块里面的内容,因此如果AS对象没有定义getter和setter方法,对象的XML描述中就不存在<accessor>,因此转换得到的JSON格式的字符串就为{}了。

for each ( var v:XML in classInfo..*.( name() == "variable" || name() == "accessor" ) )

{

	// When the length is 0 we're adding the first item so

	// no comma is necessary

	if ( s.length > 0 ) {

		// We've already added an item, so add the comma separator

		s += ","

	}

					

	s += escapeString( v.@name.toString() ) + ":" 

			+ convertToString( o[ v.@name ] );

}
 
分享到:
评论
1 楼 kevinsai 2008-04-23  
写的太精彩了 ,我就算不会flex。我都觉得十分清晰明了。 加油 

相关推荐

    as3corelib.swc及解析json的例子

    在本文中,我们将深入探讨如何在Flex 4.5中使用as3corelib库来解析JSON数据。...通过灵活地使用as3corelib,你可以轻松地在Flex 4.5应用程序中实现JSON的序列化和反序列化,从而提高开发效率和代码可维护性。

    as3corelib-.92.11.rar_as 3 corelib_as3_as3corelib_as3corelib API

    5. JSON解析:AS3CoreLib提供了`JSON`类,可以方便地将AS3对象转换为JSON字符串,以及将JSON字符串解析回AS3对象。这使得AS3与JavaScript或其他支持JSON格式的语言之间的数据交换变得更加简单。 6. 字符串处理:AS3...

    as3corelib-.92.1.zip_flex

    在本文中,我们将深入探讨 AS3CoreLib 的核心特性、JSON 类以及其在 Flex 开发中的应用。 首先,让我们了解 AS3CoreLib 是什么。AS3CoreLib 是由 Mike Chambers 和其他贡献者开发的一个开源项目,它提供了一系列的...

    as3corelib多版本

    标题提到的“as3corelib多版本”可能指的是AS3CoreLib的不同发布版本,包括.as3corelib-.93、.as3corelib-.92、.as3corelib-.92.1以及.corelib-.90。每个版本都可能包含不同的特性、性能提升或错误修复。例如,版本...

    as3corelib

    在AS3中,as3corelib提供了JSON对象,使得开发者能够轻松地在AS3和服务器之间进行数据交换,通常用于Web服务通信。 "flex"标签暗示了as3corelib与Flex框架的兼容性。Flex是一个开源的、基于MXML和AS3的开发框架,...

    as3corelib-.93.zip

    AS3CoreLib是一个开源的ActionScript 3库,主要用于增强Adobe Flash Player和Adobe AIR平台的功能。这个库由专业开发者James Ward创建并维护,为开发者提供了许多实用的工具和类,帮助他们更高效地开发富互联网应用...

    Crypto和AS3CORELIB

    AS3CORELIB是AS3的一个开源库,提供了许多原生AS3库中没有的功能,如日期和时间处理、JSON解析、XML操作以及各种实用工具类。在处理加密操作时,可能需要用到AS3CORELIB提供的类型转换工具,如将字节数组转换为十六...

    as3 解析 json

    AS3中的`JSON`类提供了解析JSON数据的基础功能,允许开发者轻松地在AS3应用中使用JSON格式的数据。通过理解JSON的基本结构和AS3的解析方法,可以有效地处理网络通信中的数据交换,提高应用的交互性和灵活性。

    AS3 JSON 包

    虽然AS3内置的JSON支持能满足大部分需求,但在处理复杂结构或者需要提高性能时,可能需要使用第三方库,如Zinc JSON库或AS3CoreLib,它们提供了更丰富的功能和更好的性能。 总结,AS3中的JSON处理是通过`JSON....

    as3corelib-.93

    3. **XML和JSON处理**: AS3CoreLib提供了XML和JSON的解析和序列化功能,使得在AS3中处理这两种数据交换格式变得简单。这对于与服务器进行数据交互或者构建基于Web的服务非常重要。 4. **日期和时间**: 库中包含了对...

    as3corelib.swc

    `as3corelib.swc` 是一个针对Adobe Flex开发的第三方库,主要包含了一系列用于增强ActionScript 3(AS3)功能的类和工具。这个组件包被广泛应用于Flex项目中,提供了一些AS3标准库中没有的功能,帮助开发者更高效地...

    在Flex中的Json应用

    Flex中的JSON应用主要涉及到使用ActionScript 3(AS3)处理JSON数据,这是一种轻量级的数据交换格式,常用于Web服务与客户端之间的通信。在Flex开发中,由于Flex是基于AS3的,所以理解如何在Flex中使用JSON至关重要...

    json类 AS3.0可用

    JSON(JavaScript Object...总的来说,AS3中的JSON类和相关库是实现客户端与服务器之间数据交换的重要工具,它们使得跨平台的数据通信变得简单而高效。理解并熟练使用这些功能,对于开发涉及前后端交互的应用至关重要。

    flex json解析包(corelib.swc)

    总结来说,"flex json解析包(corelib.swc)"提供了在Flex应用中处理JSON数据的核心工具,通过`JSON`和`JSONEncoder`类,开发者可以方便地进行JSON数据的解析、序列化以及自定义转换,从而实现与服务器之间的数据...

    ActionScript3中的JSON编码解码包

    6. **第三方库**:虽然AS3的标准库提供了基本的JSON支持,但有时第三方库如Ziggy或as3corelib可以提供更全面的功能,比如支持更复杂的JSON规范,或者提供性能优化。 7. **跨域问题**:在进行AJAX请求并涉及JSON数据...

    JSON的类库

    `as3corelib` 包含了一个名为`com.adobe.serialization.json`的包,该包下有`JSON`类,用于处理JSON数据。 `JSON.parse()`方法是将JSON格式的字符串转换为ActionScript对象。例如,如果你有一个JSON字符串`{"name":...

    flex 需要的json包

    - 将`as3corelib.swc`文件添加到Flex项目中,可以通过Flex Builder或命令行编译器将其链接到项目,以便使用其中的`JSON`类。 - 如果使用MXML,可以在`&lt;mx:Application&gt;`标签内添加`library-path`节点,指定`as3...

    flash AS3实现截屏不能少的库。这个库需要与aether.swc一起使用.zip

    "as3corelib.swc"是Adobe提供的一个开源库,包含了各种AS3的基础工具和类,如JSON解析、XML处理以及图像操作等。在这个截屏库中,可能利用了`flash.display.BitmapData`类来创建屏幕快照,这个类允许开发者读取和...

Global site tag (gtag.js) - Google Analytics