Skip to content

Commit

Permalink
Fix Asian characters in JSON issue in php version
Browse files Browse the repository at this point in the history
use native json_decode instead and wrap objects and array in haxe
objects and haxe array
  • Loading branch information
a-fung committed Sep 29, 2012
1 parent 768b0d2 commit 62c0243
Showing 1 changed file with 68 additions and 24 deletions.
92 changes: 68 additions & 24 deletions source/haxe/afung/mangaWeb3/server/Utility.hx
@@ -1,5 +1,6 @@
package afung.mangaWeb3.server;
import haxe.Json;

import php.Lib;

/**
* ...
Expand All @@ -8,29 +9,72 @@ import haxe.Json;

class Utility
{
public static function ParseJson(jsonString:String):Dynamic
{
try
{
var json:Dynamic = Json.parse(jsonString);
switch(Type.typeof(json))
{
case TObject:
return json;
default:
return null;
}
}
catch (e:Dynamic)
{
return null;
}
}

public static function Md5(input:String):String
{
return untyped __call__("md5", input);
}
public static function ParseJson(jsonString:String):Dynamic
{
try
{
var json:Dynamic = untyped __call__("json_decode", jsonString);
if (!untyped __call__("is_object", json))
{
return null;
}

json = ProcessJson(json);
return json;
}
catch (e:Dynamic)
{
return null;
}
}

private static function ProcessJson(json:Dynamic):Dynamic
{
var fields:Array<String> = Reflect.fields(json);
var obj = { };

for (fieldName in fields)
{
var field:Dynamic = Reflect.field(json, fieldName);

if (untyped __call__("is_object", field))
{
field = ProcessJson(field);
}
else if (untyped __call__("is_array", field))
{
var haxeArray:Array<Dynamic> = Lib.toHaxeArray(field);
ProcessJsonArray(haxeArray);
field = haxeArray;
}

Reflect.setField(obj, fieldName, field);
}

return obj;
}

private static function ProcessJsonArray(haxeArray:Array<Dynamic>):Void
{
for (i in 0...haxeArray.length)
{
if (untyped __call__("is_object", haxeArray[i]))
{
ProcessJson(haxeArray[i]);
}
else if (untyped __call__("is_array", haxeArray[i]))
{
var haxeArray2:Array<Dynamic> = Lib.toHaxeArray(haxeArray[i]);
ProcessJsonArray(haxeArray2);
haxeArray[i] = haxeArray2;
}
}
}

public static function Md5(input:String):String
{
return untyped __call__("md5", input);
}

public static function ArrayContains(array:Array<Dynamic>, value:Dynamic):Bool
{
Expand Down

0 comments on commit 62c0243

Please sign in to comment.