типа тоже вариант

Код AS3:
private function convertToString(obj:Object, parents:String="", level:int = 0 ):void
{
var key:String;
var keys:Array = [];
var values:Array = [];
for ( key in obj )
{
keys.push(key);
values.push(obj[key]);
}
var indxes:Array = keys.sort(Array.RETURNINDEXEDARRAY);
for (var i:int = 0; i < indxes.length; i++)
{
var j:int = indxes[i];
var subObj:*= values[j];
key = keys[j];
if (subObj is String)
{
var pfx:String = i ? "" : parents;
res += pfx + key + "=" + subObj + "\n";
}else
{
var del:String = level == 1 ?"=" : "";
convertToString(obj[key], parents + del+key, level + 1);
}
}
}
ну и эта, вы бы правила-то сформулировали, по какому принципу у key11 есть родительский префикс, а у key12 его нет? по какому принципу сортируем, какие варианты вложенности и длин и т.п.
по правилам-то спокойнее, глядишь и извращаться не придется