diff options
author | Ted Gould <ted@gould.cx> | 2010-06-28 16:54:33 -0500 |
---|---|---|
committer | Ted Gould <ted@gould.cx> | 2010-06-28 16:54:33 -0500 |
commit | ced63228a6304953dcd57adcc6a1f9906b2d9a21 (patch) | |
tree | 7a47656862d98199b680e9394cc11b96cb880123 /tests/json-loader.c | |
parent | fc3ce0689dacf6396b54e51f6a9c9f24a4a6b9ef (diff) | |
download | libdbusmenu-ced63228a6304953dcd57adcc6a1f9906b2d9a21.tar.gz libdbusmenu-ced63228a6304953dcd57adcc6a1f9906b2d9a21.tar.bz2 libdbusmenu-ced63228a6304953dcd57adcc6a1f9906b2d9a21.zip |
Turn objects into hashmaps
Diffstat (limited to 'tests/json-loader.c')
-rw-r--r-- | tests/json-loader.c | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/tests/json-loader.c b/tests/json-loader.c index aa11aa5..e61a49a 100644 --- a/tests/json-loader.c +++ b/tests/json-loader.c @@ -1,5 +1,6 @@ #include "json-loader.h" +#include <dbus/dbus-gtype-specialized.h> static GValue * node2value (JsonNode * node) @@ -17,9 +18,39 @@ node2value (JsonNode * node) if (JSON_NODE_TYPE(node) == JSON_NODE_ARRAY) { } - if (JSON_NODE_TYPE(node) == JSON_NODE_OBJECT) { + JsonObject * obj = json_node_get_object(node); + + GType type = dbus_g_type_get_map("GHashTable", G_TYPE_STRING, G_TYPE_VALUE); + GHashTable * hash = (GHashTable *)dbus_g_type_specialized_construct(type); + + g_value_init(value, type); + g_value_take_boxed(value, hash); + + DBusGTypeSpecializedAppendContext ctx; + dbus_g_type_specialized_init_append(value, &ctx); + + GList * members = NULL; + for (members = json_object_get_members(obj); members != NULL; members = g_list_next(members)) { + const gchar * member = members->data; + + JsonNode * lnode = json_object_get_member(obj, member); + GValue * value = node2value(lnode); + + if (value != NULL) { + GValue name = {0}; + g_value_init(&name, G_TYPE_STRING); + g_value_set_static_string(&name, member); + + dbus_g_type_specialized_map_append(&ctx, &name, value); + + g_value_unset(&name); + g_value_unset(value); + g_free(value); + } + } + } g_free(value); |