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 }
  • 相关阅读:
    为什么你SQL Server的数据库文件的Date modified没有变化呢?
    SQL Server中SELECT会真的阻塞SELECT吗?
    ORACLE从共享池删除指定SQL的执行计划
    flink DataStream API使用及原理
    漫谈九品中正制和现阶段阶层分层
    flink dataset api使用及原理
    从flink-example分析flink组件(3)WordCount 流式实战及源码分析
    TODO supply a title
    avalon2学习教程01
    avalon1与avalon2的异同点
  • 原文地址:https://www.cnblogs.com/frost-yen/p/5087813.html
Copyright © 2011-2022 走看看