zoukankan      html  css  js  c++  java
  • [ActionScript 3.0] AS3 实现XML转换成JSON

      1 package com.fylib.util
      2 {
      3     /**
      4      * @author Frost.Yen
      5      * @E-mail 871979853@qq.com
      6      * @create 2015-6-18 下午2:06:01
      7      *
      8      */
      9     public class XML2JSON
     10     {
     11         private static var _arrays:Array;
     12         public function XML2JSON()
     13         {
     14             
     15         }
     16         public static function parse(node:*):Object {
     17             var obj:Object = {};
     18             var numOfChilds:int = node.children().length();
     19             for(var i:int = 0; i<numOfChilds; i++) {
     20                 var childNode:XML = node.children()[i] as XML;
     21                 var childNodeName:String = childNode.name();
     22                 var value:*;
     23                 if(childNode.children().length() == 1 && childNode.children()[0].name() == null) {
     24                     if(childNode.attributes().length() > 0) {
     25                         value = {
     26                             _content: childNode.children()[0].toString()
     27                         };
     28                         var numOfAttributes:int = childNode.attributes().length();
     29                         for(var j:int=0; j<numOfAttributes; j++) {
     30                             value[childNode.attributes()[j].name().toString()] = childNode.attributes()[j].toString();
     31                         }
     32                     } else {
     33                         value = childNode.children()[0].toString();
     34                     }
     35                 } else {
     36                     value = parse(childNode);
     37                 }
     38                 if(obj[childNodeName]) {
     39                     if(getTypeof(obj[childNodeName]) == "array") {
     40                         obj[childNodeName].push(value);
     41                     } else {
     42                         obj[childNodeName] = [obj[childNodeName], value];
     43                     }
     44                 } else if(isArray(childNodeName)) {
     45                     obj[childNodeName] = [value];
     46                 } else {
     47                     obj[childNodeName] = value;
     48                 }
     49             }
     50             numOfAttributes = node.attributes().length();            
     51             for(i=0; i<numOfAttributes; i++) {
     52                 obj[node.attributes()[i].name().toString()] = node.attributes()[i].toString();
     53             }
     54             if(numOfChilds == 0) {
     55                 if(numOfAttributes == 0) {
     56                     obj = "";
     57                 } else {
     58                     obj._content = "";
     59                 }
     60             }
     61             return obj;
     62         }
     63         public static function get arrays():Array {
     64             if(!_arrays) {
     65                 _arrays = [];
     66             }
     67             return _arrays;
     68         }
     69         public static function set arrays(a:Array):void {
     70             _arrays = a;
     71         }
     72         private static function isArray(nodeName:String):Boolean {
     73             var numOfArrays:int = _arrays ? _arrays.length : 0;
     74             for(var i:int=0; i<numOfArrays; i++) {
     75                 if(nodeName == _arrays[i]) {
     76                     return true;
     77                 }
     78             }
     79             return false;
     80         }
     81         private static function getTypeof(o:*):String {
     82             if(typeof(o) == "object") {
     83                 if(o.length == null) {
     84                     return "object";
     85                 } else if(typeof(o.length) == "number") {
     86                     return "array";
     87                 } else {
     88                     return "object";
     89                 }
     90             } else {
     91                 return typeof(o);
     92             }
     93         }
     94 
     95         public static function printJSON(o:Object):void {
     96             //trace("Debug.printJSON");
     97             //trace(parseJSON(o));
     98         }
     99         public static function parseJSON(o:*, spaces:int = 1):String {
    100             var str:String = "";
    101             if(getTypeof(o) == "object") {
    102                 str += "{
    ";
    103                 for(var i:* in o) {
    104                     str += getSpaces(spaces) + i + "=";
    105                     if(getTypeof(o[i]) == "object" || getTypeof(o[i]) == "array") {
    106                         str += parseJSON(o[i], spaces + 1) + "
    ";
    107                     } else {
    108                         var type:String = getTypeof(o[i]);
    109                         if(type == "string") {
    110                             str += """ + o[i] + ""
    ";
    111                         } else if(type == "number") {
    112                             str += o[i] + "
    ";
    113                         }
    114                     }
    115                 }
    116                 str += getSpaces(spaces - 1 < 0 ? 0 : spaces - 1) + "}";
    117             } else if(getTypeof(o) == "array") {
    118                 str += "[
    ";
    119                 var n:int = o.length;
    120                 for(i=0; i<n; i++) {
    121                     str += getSpaces(spaces) + "[" + i + "]=";
    122                     if(getTypeof(o[i]) == "object" || getTypeof(o[i]) == "array") {
    123                         str += parseJSON(o[i], spaces + 1) + "
    ";
    124                     } else {
    125                         type = getTypeof(o[i]);
    126                         if(type == "string") {
    127                             str += """ + o[i] + """;
    128                         } else if(type == "number") {
    129                             str += o[i];
    130                         }
    131                         str += "
    ";
    132                     }
    133                 }
    134                 str += getSpaces(spaces - 1 < 0 ? 0 : spaces - 1) + "]";
    135             }
    136             return str;
    137         }
    138         private static function getSpaces(n:int):String {
    139             var str:String = "";
    140             for(var i:int=0; i<n; i++) {
    141                 str += "  ";
    142             }
    143             return str;
    144         }
    145 //        private static function getTypeof(o:*):String {
    146 //            return typeof(o) == "object" ? (o.length == null ? "object" : "array") : typeof(o);
    147 //        }
    148     }
    149 }
  • 相关阅读:
    Windows XP下 Android开发环境 搭建
    Android程序的入口点
    在eclipse里 新建android项目时 提示找不到proguard.cfg
    64位WIN7系统 下 搭建Android开发环境
    在eclipse里 新建android项目时 提示找不到proguard.cfg
    This Android SDK requires Android Developer Toolkit version 20.0.0 or above
    This Android SDK requires Android Developer Toolkit version 20.0.0 or above
    Android requires compiler compliance level 5.0 or 6.0. Found '1.4' instead
    Windows XP下 Android开发环境 搭建
    Android程序的入口点
  • 原文地址:https://www.cnblogs.com/frost-yen/p/5087813.html
Copyright © 2011-2022 走看看