Advertisement
Gaboose

AS3 JSON encoding

Jan 30th, 2013
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /** Contrary to many actionscript json libraries,
  2.  * this function encodes properties of dynamic classes. */ 
  3. public static function jsonEncode(obj:*, pretty:Boolean = false, maxLength:int = 60, depth:int = 0):String {
  4.     const TAB_UNIT:String = "    ";
  5.    
  6.     var str:String;
  7.     var key:String;
  8.     var el:*;
  9.     var arr:Array;
  10.     var keyArr:Array;
  11.    
  12.     var tabStr:String;
  13.     if (pretty) {
  14.         tabStr = "";
  15.         for (var i:int = 0; i < depth; i++)
  16.             tabStr += TAB_UNIT;
  17.     }
  18.    
  19.     if (obj is Number || obj is int || obj is Boolean)
  20.     {
  21.         return String(obj);
  22.     }
  23.     else if (obj is String)
  24.     {
  25.         //Escape backslashes
  26.         str = replaceAll(obj as String, "\\", "\\\\");
  27.         //Escape double quotes
  28.         str = replaceAll(str, "\"", "\\\"");
  29.         return '"' + str + '"';
  30.     }
  31.     else if (obj is Array)
  32.     {
  33.         arr = [];
  34.         for each (el in obj)
  35.             arr.push(jsonEncode(el, pretty, maxLength, depth + 1));
  36.        
  37.         if (pretty) {
  38.             str = '[' + arr.join(', ') + ']';
  39.             if (str.length > maxLength) {
  40.                 str = '[\n' +
  41.                     tabStr + TAB_UNIT + arr.join(',\n' + tabStr + TAB_UNIT) + '\n' +
  42.                     tabStr + ']';
  43.             }
  44.             return str;
  45.         } else {
  46.             return '[' + arr.join(',') + ']';
  47.         }
  48.     }
  49.     else
  50.     {
  51.         keyArr = getObjKeys(obj);
  52.         arr = [];
  53.         for each (key in keyArr)
  54.             arr.push('"' + key + (pretty ? '": ' : '":') + jsonEncode(obj[key], pretty, maxLength, depth + 1));
  55.        
  56.         if (pretty) {
  57.             str = '{' + arr.join(', ') + '}';
  58.             if (str.length > maxLength) {
  59.                 str = '{\n' +
  60.                     tabStr + TAB_UNIT + arr.join(',\n' + tabStr + TAB_UNIT) + '\n' +
  61.                     tabStr + '}';
  62.             }
  63.             return str;
  64.         } else {
  65.             return '{' + arr.join(',') + '}';
  66.         }
  67.     }
  68. }
  69.  
  70. public static function replaceAll(target:String, p:String, repl:String):String {
  71.     var str:String = target;
  72.     var i:int = 0;
  73.     var k:int;
  74.     while ((k = str.indexOf(p, i)) >= 0) {
  75.         str = str.substring(0, k) + repl + str.substring(k + p.length);
  76.         i = k + repl.length;
  77.     }
  78.     return str;
  79. }
  80.  
  81. /** Returns an array of public parameter names of a given instance
  82.  * of some class and also dynamically set key names.*/
  83. public static function getObjKeys(obj:Object):Array
  84. {
  85.     var arr:Array = [];
  86.     for each (var qname:QName in ObjectUtil.getClassInfo(obj).properties)
  87.         arr.push(qname.localName);
  88.    
  89.     return arr;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement