Flex中JSON转XML

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>

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值