diff options
author | Emmanuele Bassi <ebassi@linux.intel.com> | 2011-02-06 12:22:49 +0000 |
---|---|---|
committer | Emmanuele Bassi <ebassi@linux.intel.com> | 2011-02-06 12:22:49 +0000 |
commit | 2c5f4563c54fa273ffd8dbe02b60a12c4b54b977 (patch) | |
tree | 87e0406a61e6f4421850d373ea9eaacf4455bd44 /json-glib/json-reader.c | |
parent | b2880f5a4dad07ff96a9b6578ffc5d677f75eb94 (diff) | |
download | json-glib-2c5f4563c54fa273ffd8dbe02b60a12c4b54b977.tar.gz |
reader: Add accessor for the member name
This should allow easy access to the member name during iteration.
Diffstat (limited to 'json-glib/json-reader.c')
-rw-r--r-- | json-glib/json-reader.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/json-glib/json-reader.c b/json-glib/json-reader.c index 8262def..a4fa14e 100644 --- a/json-glib/json-reader.c +++ b/json-glib/json-reader.c @@ -91,6 +91,8 @@ struct _JsonReaderPrivate JsonNode *current_node; JsonNode *previous_node; + gchar *current_member; + GError *error; }; @@ -493,11 +495,13 @@ json_reader_read_element (JsonReader *reader, index_); priv->previous_node = priv->current_node; + g_free (priv->current_member); members = json_object_get_members (object); name = g_list_nth_data (members, index_); priv->current_node = json_object_get_member (object, name); + priv->current_member = g_strdup (name); g_list_free (members); } @@ -539,6 +543,9 @@ json_reader_end_element (JsonReader *reader) else tmp = NULL; + g_free (priv->current_member); + priv->current_member = NULL; + priv->current_node = priv->previous_node; priv->previous_node = tmp; } @@ -639,8 +646,11 @@ json_reader_read_member (JsonReader *reader, "object at the current position.", member_name); + g_free (priv->current_member); + priv->previous_node = priv->current_node; priv->current_node = json_object_get_member (object, member_name); + priv->current_member = g_strdup (member_name); return TRUE; } @@ -673,6 +683,9 @@ json_reader_end_member (JsonReader *reader) else tmp = NULL; + g_free (priv->current_member); + priv->current_member = NULL; + priv->current_node = priv->previous_node; priv->previous_node = tmp; } @@ -901,3 +914,22 @@ json_reader_get_null_value (JsonReader *reader) return JSON_NODE_HOLDS_NULL (reader->priv->current_node); } + +/** + * json_reader_get_member_name: + * @reader: a #JsonReader + * + * Retrieves the name of the current member. + * + * Return value: (transfer none): the name of the member, or %NULL + * + * Since: 0.14 + */ +G_CONST_RETURN gchar * +json_reader_get_member_name (JsonReader *reader) +{ + g_return_val_if_fail (JSON_IS_READER (reader), NULL); + json_reader_return_val_if_error_set (reader, NULL); + + return reader->priv->current_member; +} |