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 | |
| 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.
| -rw-r--r-- | doc/reference/json-glib-sections.txt | 1 | ||||
| -rw-r--r-- | json-glib/json-glib.symbols | 1 | ||||
| -rw-r--r-- | json-glib/json-reader.c | 32 | ||||
| -rw-r--r-- | json-glib/json-reader.h | 1 | ||||
| -rw-r--r-- | json-glib/tests/reader-test.c | 1 |
5 files changed, 36 insertions, 0 deletions
diff --git a/doc/reference/json-glib-sections.txt b/doc/reference/json-glib-sections.txt index 9d3bacb..de2b990 100644 --- a/doc/reference/json-glib-sections.txt +++ b/doc/reference/json-glib-sections.txt @@ -330,6 +330,7 @@ json_reader_end_member json_reader_is_object json_reader_count_members json_reader_list_members +json_reader_get_member_name <SUBSECTION> json_reader_is_value json_reader_get_value diff --git a/json-glib/json-glib.symbols b/json-glib/json-glib.symbols index 06d0f63..40dbe7b 100644 --- a/json-glib/json-glib.symbols +++ b/json-glib/json-glib.symbols @@ -142,6 +142,7 @@ json_reader_get_boolean_value json_reader_get_double_value
json_reader_get_error
json_reader_get_int_value
+json_reader_get_member_name
json_reader_get_null_value
json_reader_get_string_value
json_reader_get_type
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; +} diff --git a/json-glib/json-reader.h b/json-glib/json-reader.h index d6d39fb..6cea36b 100644 --- a/json-glib/json-reader.h +++ b/json-glib/json-reader.h @@ -127,6 +127,7 @@ gboolean json_reader_read_member (JsonReader *reader, void json_reader_end_member (JsonReader *reader); gint json_reader_count_members (JsonReader *reader); gchar ** json_reader_list_members (JsonReader *reader); +G_CONST_RETURN gchar * json_reader_get_member_name (JsonReader *reader); gboolean json_reader_is_value (JsonReader *reader); JsonNode * json_reader_get_value (JsonReader *reader); diff --git a/json-glib/tests/reader-test.c b/json-glib/tests/reader-test.c index e92908e..c884ca3 100644 --- a/json-glib/tests/reader-test.c +++ b/json-glib/tests/reader-test.c @@ -59,6 +59,7 @@ test_base_object (void) g_assert (json_reader_get_error (reader) == NULL); g_assert (json_reader_read_element (reader, 2)); + g_assert_cmpstr (json_reader_get_member_name (reader), ==, "blah"); g_assert (json_reader_is_value (reader)); g_assert_cmpint (json_reader_get_int_value (reader), ==, 47); json_reader_end_element (reader); |
