Adam D. Ruppe wrote:
>Oh, wait a minute, you were doing from json, not to json.
>
>Try this on for size. It converts from a std.json.JSONValue
>to a std.variant.Varaint, which is quite a bit simpler to use.
>
>======
>
>import std.variant;
>import std.json;
>
>Variant jsonToVariant(string json) {
>       auto decoded = parseJSON(json);
>       return jsonValueToVariant(decoded);
>}
>
>Variant jsonValueToVariant(JSONValue v) {
>       Variant ret;
>
>       final switch(v.type) {
>               case JSON_TYPE.STRING:
>                       ret = v.str;
>               break;
>               case JSON_TYPE.INTEGER:
>                       ret = v.integer;
>               break;
>               case JSON_TYPE.FLOAT:
>                       ret = v.floating;
>               break;
>               case JSON_TYPE.OBJECT:
>                       Variant[string] obj;
>                       foreach(k, val; v.object) {
>                               obj[k] = jsonValueToVariant(val);
>                       }
>
>                       ret = obj;
>               break;
>               case JSON_TYPE.ARRAY:
>                       Variant[] arr;
>                       foreach(i; v.array) {
>                               arr ~= jsonValueToVariant(i);
>                       }
>
>                       ret = arr;
>               break;
>               case JSON_TYPE.TRUE:
>                       ret = true;
>               break;
>               case JSON_TYPE.FALSE:
>                       ret = false;
>               break;
>               case JSON_TYPE.NULL:
>                       ret = null;
>               break;
>       }
>
>       return ret;
>}
>
>======

Thanks, that looks great!
Can't test it right now, but it seems this even works recursively?
Awesome!

-- 
Johannes Pfau

Reply via email to