1、Flex中JSON转XML
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationComplete="init()"
>
<fx:Script>
<![CDATA[
import com.adobe.serialization.json.JSON;
import com.adobe.serialization.json.JSONDecoder;
import com.adobe.serialization.json.JSONEncoder;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.events.FlexEvent;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
private var jsXml:XML =<root/>;
private var obj:Object ={"b":0,"c":0.5,"a":"a","obj":{"b":"str","c":1,"obj":
{"m":"mm","n":"nn","obj":{"a":1,"b":2}},"arr":[1,2,3,4]},"arr":[1,2,3,4]};
private function init():void{
praseJson(obj,jsXml);
}
private function praseJson(obj:Object,nodeParent:XML):void{
for(var item:Object in obj){
var node:XML = new XML(<{item}></{item}>);
if (item == "arr"){
var arr :Array = String(obj[item]).split(",");
for (var i:int=0;i<arr.length;i++){
node.a(new XML(<{i}>{arr[i]}</{i}>));
}
}else if (item == "obj"){
praseJson(obj[item], node);
}else{
node = new XML(<{item}>{obj[item]}</{item}>);
}
nodeParent.a(node);
}
Alert.show(nodeParent.toXMLString());
}
]]>
</fx:Script>
</s:Application>
2、
Flex中XML转JSON
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
creationComplete="init()"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955"
minHeight="600">
<fx:Script>
<![CDATA[
import com.adobe.serialization.json.JSON;
import com.adobe.serialization.json.JSONDecoder;
import com.adobe.serialization.json.JSONEncoder;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.events.FlexEvent;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
private var obj:Object= new Object();
protected function init():void{
xmlService.send();
}
protected function xmlService_faultHandler(event:FaultEvent):void{
Alert.show(event.message.toString());
}
protected function xmlService_resultHandler(event:ResultEvent):void{
trace("读取完毕")
var xml:XML=event.result as XML;
praseXML(xml,obj);
//把对象转换成json
var js:JSONEncoder = new JSONEncoder(obj);
var jsonStr:String = js.getString();
Alert.show(jsonStr);
}
//把xml转换为对象
private function praseXML(xml:XML,obj:Object):void{
var xmlList:XMLList = xml.children();
for each(var childrenXml:XML in xmlList){
var key:String = childrenXml.name().toString();
var value:String = childrenXml.toString();
if(childrenXml.@type=="int"){
if(obj is Array)
obj.push(int(value));
else
obj[key]=int(value);
}
else if(childrenXml.@type=="String"){
if(obj is Array)
obj.push(String(value));
else
obj[key]=String(value);
}
else if(childrenXml.@type=="Number"){
if(obj is Array)
obj.push(Number(value));
else
obj[key]=Number(value);
}
else if(childrenXml.@type=="Array"){
var arr:Array=[];
if(obj is Array)
obj.push(arr);
else
obj[key]=arr;
praseXML(childrenXml,arr);
}
else if(childrenXml.@type=="Object"){
var o:Object={};
if(obj is Array)
obj.push(o);
else
obj[key]=o;
praseXML(childrenXml,o);
}
}
]]>
</fx:Script>
<fx:Declarations>
<s:HTTPService id="xmlService"
url="test.xml"
fault="xmlService_faultHandler(event)"
result="xmlService_resultHandler(event)"
resultFormat="e4x"
showBusyCursor="true"/>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
</s:Application>
下面是test.xml
<?xml version="1.0" encoding="utf-8" ?>
<data>
<a type="String">a</a>
<b type="int">b</b>
<c type="Number">0.5</c>
<arr type="Array">
<value type="int">1</value >
<value type="int">2</value >
<value type="int">3</value >
<value type="int">4</value >
</arr>
<obj type="Object">
<a type="int">1</a>
<b type="String">str</b>
<c type="Object">
<c1 type="int">1</c1>
<c2 type="String">str</c2>
</c>
<d type="Array">
<val type="Object">
<c1 type="int">1</c1>
<c2 type="String">str</c2>
</val>
<val type="Object">
<c1 type="int">2</c1>
<c2 type="String">str2</c2>
</val>
<val type="Object">
<c1 type="int">3</c1>
<c2 type="String">str2</c2>
</val>
</d>
</obj>
</data>