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;
}

======

Reply via email to