summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@linux.intel.com>2011-02-06 12:22:49 +0000
committerEmmanuele Bassi <ebassi@linux.intel.com>2011-02-06 12:22:49 +0000
commit2c5f4563c54fa273ffd8dbe02b60a12c4b54b977 (patch)
tree87e0406a61e6f4421850d373ea9eaacf4455bd44
parentb2880f5a4dad07ff96a9b6578ffc5d677f75eb94 (diff)
downloadjson-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.txt1
-rw-r--r--json-glib/json-glib.symbols1
-rw-r--r--json-glib/json-reader.c32
-rw-r--r--json-glib/json-reader.h1
-rw-r--r--json-glib/tests/reader-test.c1
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);