Răsfoiți Sursa

initial replacer support for Json

Simon Krajewski 12 ani în urmă
părinte
comite
7b949b3673
1 a modificat fișierele cu 12 adăugiri și 8 ștergeri
  1. 12 8
      std/haxe/Json.hx

+ 12 - 8
std/haxe/Json.hx

@@ -56,7 +56,9 @@ class Json {
 		#end
 		#end
 	}
 	}
 
 
-	function toString(v:Dynamic) {
+	var replacer:Dynamic -> Dynamic -> Dynamic;
+
+	function toString(v:Dynamic, ?replacer:Dynamic -> Dynamic -> Dynamic) {
 		#if flash9
 		#if flash9
 		buf = new flash.utils.ByteArray();
 		buf = new flash.utils.ByteArray();
 		buf.endian = flash.utils.Endian.BIG_ENDIAN;
 		buf.endian = flash.utils.Endian.BIG_ENDIAN;
@@ -64,7 +66,8 @@ class Json {
 		#else
 		#else
 		buf = new StringBuf();
 		buf = new StringBuf();
 		#end
 		#end
-		toStringRec(v);
+		this.replacer = replacer;
+		toStringRec("", v);
 		return buf.toString();
 		return buf.toString();
 	}
 	}
 
 
@@ -78,7 +81,7 @@ class Json {
 			if( first ) first = false else addChar(','.code);
 			if( first ) first = false else addChar(','.code);
 			quote(f);
 			quote(f);
 			addChar(':'.code);
 			addChar(':'.code);
-			toStringRec(value);
+			toStringRec(f, value);
 		}
 		}
 		addChar('}'.code);
 		addChar('}'.code);
 	}
 	}
@@ -93,7 +96,8 @@ class Json {
 		fieldsString(v,Reflect.fields(v));
 		fieldsString(v,Reflect.fields(v));
 	}
 	}
 
 
-	function toStringRec(v:Dynamic) {
+	function toStringRec(k:Dynamic, v:Dynamic) {
+		if (replacer != null) v = replacer(k, v);
 		switch( Type.typeof(v) ) {
 		switch( Type.typeof(v) ) {
 		case TUnknown:
 		case TUnknown:
 			add('"???"');
 			add('"???"');
@@ -113,11 +117,11 @@ class Json {
 				addChar('['.code);
 				addChar('['.code);
 				var len = v.length;
 				var len = v.length;
 				if( len > 0 ) {
 				if( len > 0 ) {
-					toStringRec(v[0]);
+					toStringRec(0, v[0]);
 					var i = 1;
 					var i = 1;
 					while( i < len ) {
 					while( i < len ) {
 						addChar(','.code);
 						addChar(','.code);
-						toStringRec(v[i++]);
+						toStringRec(i, v[i++]);
 					}
 					}
 				}
 				}
 				addChar(']'.code);
 				addChar(']'.code);
@@ -401,13 +405,13 @@ class Json {
 		#end
 		#end
 	}
 	}
 
 
-	public static function stringify( value : Dynamic ) : String {
+	public static function stringify( value : Dynamic, ?replacer:Dynamic -> Dynamic -> Dynamic ) : String {
 		#if (php && !haxeJSON)
 		#if (php && !haxeJSON)
 		return phpJsonEncode(value);
 		return phpJsonEncode(value);
 		#elseif (flash11 && !haxeJSON)
 		#elseif (flash11 && !haxeJSON)
 		return null;
 		return null;
 		#else
 		#else
-		return new Json().toString(value);
+		return new Json().toString(value, replacer);
 		#end
 		#end
 	}
 	}