summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@openedhand.com>2007-10-16 17:25:08 +0100
committerEmmanuele Bassi <ebassi@openedhand.com>2007-10-16 17:25:08 +0100
commit85cb0f44c4c7297a75141999674f3eb0fdf6a308 (patch)
tree8d3d81f7ac0e0be156bcf729f95519be7586f51e
parent474ecf1cc6aae35b184edffc75fc8626c3f12f61 (diff)
downloadjson-glib-85cb0f44c4c7297a75141999674f3eb0fdf6a308.tar.gz
Add a method for getting all the nodes from a JsonObject
To map json_array_get_elements(), a json_object_get_values() method has been added which returns the list of JsonNodes contained by a JsonObject.
-rw-r--r--doc/reference/json-glib-sections.txt1
-rw-r--r--json-glib/json-object.c41
-rw-r--r--json-glib/json-types.h1
3 files changed, 43 insertions, 0 deletions
diff --git a/doc/reference/json-glib-sections.txt b/doc/reference/json-glib-sections.txt
index 9b404df..176e877 100644
--- a/doc/reference/json-glib-sections.txt
+++ b/doc/reference/json-glib-sections.txt
@@ -11,6 +11,7 @@ json_object_add_member
json_object_has_member
json_object_get_member
json_object_get_members
+json_object_get_values
json_object_get_size
json_object_remove_member
diff --git a/json-glib/json-object.c b/json-glib/json-object.c
index 32a6a85..c6eeff1 100644
--- a/json-glib/json-object.c
+++ b/json-glib/json-object.c
@@ -179,6 +179,16 @@ get_keys (gpointer key,
*keys = g_list_prepend (*keys, key);
}
+static void
+get_values (gpointer key,
+ gpointer value,
+ gpointer user_data)
+{
+ GList **values = user_data;
+
+ *values = g_list_prepend (*values, value);
+}
+
static GList *
g_hash_table_get_keys (GHashTable *hash_table)
{
@@ -190,6 +200,18 @@ g_hash_table_get_keys (GHashTable *hash_table)
return retval;
}
+
+static GList *
+g_hash_table_get_values (GHashTable *hash_table)
+{
+ GList *retval = NULL;
+
+ g_return_val_if_fail (hash_table != NULL, NULL);
+
+ g_hash_table_foreach (hash_table, get_values, &retval);
+
+ return retval;
+}
#endif /* GLIB_MAJOR_VERSION == 2 && GLIB_MINOR_VERSION < 14 */
/**
@@ -213,6 +235,25 @@ json_object_get_members (JsonObject *object)
}
/**
+ * json_object_get_values:
+ * @object: a #JsonObject
+ *
+ * Retrieves all the values of the members of a #JsonObject.
+ *
+ * Return value: a #GList of #JsonNode<!-- -->s. The content of the
+ * list is owned by the #JsonObject and should never be modified
+ * or freed. When you have finished using the returned list, use
+ * g_list_free() to free the resources it has allocated.
+ */
+GList *
+json_object_get_values (JsonObject *object)
+{
+ g_return_val_if_fail (object != NULL, NULL);
+
+ return g_hash_table_get_values (object->members);
+}
+
+/**
* json_object_get_member:
* @object: a #JsonObject
* @member_name: the name of the JSON object member to access
diff --git a/json-glib/json-types.h b/json-glib/json-types.h
index 26086cb..323bf87 100644
--- a/json-glib/json-types.h
+++ b/json-glib/json-types.h
@@ -139,6 +139,7 @@ gboolean json_object_has_member (JsonObject *object,
const gchar *member_name);
void json_object_remove_member (JsonObject *object,
const gchar *member_name);
+GList * json_object_get_values (JsonObject *object);
guint json_object_get_size (JsonObject *object);
GType json_array_get_type (void) G_GNUC_CONST;