Skip to content

Embed URL

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Serialize D types to json
module json;
import std.conv;
import std.array;
import std.traits;
string json(T) (T obj) {
static if (is(typeof(obj) == string)) {
return "\"" ~ obj.replace("\\", "\\\\").replace("\"", "\\\"") ~ "\"";
} else static if (isBasicType!(typeof(obj))) {
return to!string(obj);
} else static if (isArray!(typeof(obj))) {
string res = "";
foreach (val; obj) {
res ~= json(val) ~ ",";
}
if (res.length > 0) res = res[0..$-1];
return "[" ~ res ~ "]";
} else {
string res = "";
foreach (mem; __traits(allMembers, typeof(obj))) {
static if (!isCallable!(__traits(getMember, obj, mem)) && __traits(compiles, json(__traits(getMember, obj, mem)))) {
auto val = __traits(getMember, obj, mem);
res ~= "\"" ~ mem ~ "\":" ~ json(val) ~ ",";
}
}
if (res.length > 0) res = res[0..$-1];
return "{" ~ res ~ "}";
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.