Yes, I don't quite understand it... I think it looks ok in the source:
https://github.com/patefacio/vibe.d/blob/master/source/vibe/data/json.d

}elsestaticif(isAssociativeArray!T){ aliastypeof(T.init.values[0])TV; aliasKeyType!TTK; Unqual!TV[TK]dst; foreach(stringkey,value;src){ staticif(is(TK==string)){ dst[key]=deserializeJson!(Unqual!TV)(value); }elsestaticif(is(TK==enum)){ dst[to!(TK)(key)] = deserializeJson!(Unqual!TV)(value); }elsestaticif(isStringSerializable!TK){ autodsk=TK.fromString(key); dst[dsk]=deserializeJson!(Unqual!TV)(value); } } returndst;

>________________________________
> From: Михаил Страшун <notifications@github.com>
>To: rejectedsoftware/vibe.d <vibe.d@noreply.github.com> 
>Cc: Daniel Davidson <dbdavidson@yahoo.com> 
>Sent: Thursday, October 3, 2013 9:31 AM
>Subject: Re: [vibe.d] added support for enums (or other string convertable types) as keys to m... (#333)
> 
>
>
>In source/vibe/data/json.d:
>> @@ -899,8 +899,16 @@ Json serializeToJson(T)(T value)
>  		return Json(ret);
>  	} else static if( isAssociativeArray!TU ){
>  		Json[string] ret;
> -		foreach( string key, value; value )
> -			ret[key] = serializeToJson(value);
> +           	alias KeyType!T TK;
> +		foreach( key, value; value ) {
> +                         static if(is(TK == string)) {
> +                                ret[key] = serializeToJson(value);
> +                         } else static if(is(TK == enum)) {
> +                                ret[to!string(key)] = serializeToJson(value);
> +                         } else static if(isStringSerializable!(TK)) {
> +                                ret[key.toString()] = serializeToJson(value);
> +                         }
> +                } 
>Something is very wrong with whitespaces in this block.
>—
>Reply to this email directly or view it on GitHub.
>
>