summaryrefslogtreecommitdiff
path: root/json-glib/json-reader.c
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 /json-glib/json-reader.c
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.
Diffstat (limited to 'json-glib/json-reader.c')
-rw-r--r--json-glib/json-reader.c32
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;
+}