summaryrefslogtreecommitdiff
path: root/json-glib/json-reader.c
diff options
context:
space:
mode:
Diffstat (limited to 'json-glib/json-reader.c')
-rw-r--r--json-glib/json-reader.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/json-glib/json-reader.c b/json-glib/json-reader.c
index cde828d..5c2c00c 100644
--- a/json-glib/json-reader.c
+++ b/json-glib/json-reader.c
@@ -643,6 +643,52 @@ json_reader_end_member (JsonReader *reader)
}
/**
+ * json_reader_list_members:
+ * @reader: a #JsonReader
+ *
+ * Retrieves a list of member names from the current position, if @reader
+ * is positioned on an object.
+ *
+ * Return value: (transfer full): a newly allocated, %NULL-terminated
+ * array of strings holding the members name. Use g_strfreev() when
+ * done.
+ *
+ * Since: 0.14
+ */
+gchar **
+json_reader_list_members (JsonReader *reader)
+{
+ JsonReaderPrivate *priv;
+ GList *members, *l;
+ gchar **retval;
+ gint i;
+
+ g_return_val_if_fail (JSON_IS_READER (reader), NULL);
+
+ priv = reader->priv;
+
+ if (priv->current_node == NULL)
+ return NULL;
+
+ if (!JSON_NODE_HOLDS_OBJECT (priv->current_node))
+ return NULL;
+
+ members = json_object_get_members (json_node_get_object (priv->current_node));
+ if (members == NULL)
+ return NULL;
+
+ retval = g_new (gchar*, g_list_length (members) + 1);
+ for (l = members, i = 0; l != NULL; l = l->next, i += 1)
+ retval[i] = g_strdup (l->data);
+
+ retval[i] = NULL;
+
+ g_list_free (members);
+
+ return retval;
+}
+
+/**
* json_reader_count_members:
* @reader: a #JsonReader
*