module symmetry.helper.prettyjson; import std.json; import std.conv; import std.range:repeat; string prettyPrint(JSONValue json, int indentLevel=0, string prefix="") { import std.range:appender; auto ret=appender!string; ret.put('\t'.repeat(indentLevel)); ret.put(prefix); //ret.put(' '.repeat(indentLevel*8)); final switch(json.type) { alias string_ = immutable(char)[]; case JSONType.null_: ret.put("<null>\n"); return ret.data; case JSONType..string: ret.put(json.str~"\n"); return ret.data; case JSONType.integer: ret.put(json.integer.to!string_~"\n"); return ret.data; case JSONType.uinteger: ret.put(json.uinteger.to!string_~"\n"); return ret.data; case JSONType.float_: ret.put(json.floating.to!string_~"\n"); return ret.data; case JSONType.true_: ret.put("true\n"); return ret.data; case JSONType.false_: ret.put("false\n"); return ret.data; case JSONType.object: ret.put("{\n"); foreach(key,value;json.object) ret.put(value.prettyPrint(indentLevel+1,key~" : ")); ret.put('\t'.repeat(indentLevel)); ret.put("}\n"); return ret.data; case JSONType.array: ret.put("[\n"); foreach(key;json.array) ret.put(prettyPrint(key,indentLevel+1)); ret.put('\t'.repeat(indentLevel)); ret.put("]\n"); return ret.data; } assert(0); }