From a2adf6ec98bb45a3152e5006606a3d511e7b77a0 Mon Sep 17 00:00:00 2001 From: Petri Lehtinen Date: Thu, 30 Apr 2009 16:38:22 +0300 Subject: [PATCH] Add support for iterating over objects --- include/jansson.h | 4 ++++ src/value.c | 44 +++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/include/jansson.h b/include/jansson.h index d423bdd..41bb9ce 100644 --- a/include/jansson.h +++ b/include/jansson.h @@ -64,6 +64,10 @@ static inline void json_decref(json_t *json) json_t *json_object_get(const json_t *object, const char *key); int json_object_set(json_t *object, const char *key, json_t *value); int json_object_del(json_t *object, const char *key); +void *json_object_iter(json_t *object); +void *json_object_iter_next(json_t *object, void *iter); +const char *json_object_iter_key(void *iter); +json_t *json_object_iter_value(void *iter); unsigned int json_array_size(const json_t *array); json_t *json_array_get(const json_t *array, unsigned int index); diff --git a/src/value.c b/src/value.c index 6ab44a6..d330203 100644 --- a/src/value.c +++ b/src/value.c @@ -104,6 +104,17 @@ json_t *json_object_get(const json_t *json, const char *key) return hashtable_get(object->hashtable, key); } +int json_object_set(json_t *json, const char *key, json_t *value) +{ + json_object_t *object; + + if(!json_is_object(json)) + return -1; + + object = json_to_object(json); + return hashtable_set(object->hashtable, strdup(key), json_incref(value)); +} + int json_object_del(json_t *json, const char *key) { json_object_t *object; @@ -115,15 +126,42 @@ int json_object_del(json_t *json, const char *key) return hashtable_del(object->hashtable, key); } -int json_object_set(json_t *json, const char *key, json_t *value) +void *json_object_iter(json_t *json) { json_object_t *object; if(!json_is_object(json)) - return -1; + return NULL; object = json_to_object(json); - return hashtable_set(object->hashtable, strdup(key), json_incref(value)); + return hashtable_iter(object->hashtable); +} + +void *json_object_iter_next(json_t *json, void *iter) +{ + json_object_t *object; + + if(!json_is_object(json) || iter == NULL) + return NULL; + + object = json_to_object(json); + return hashtable_iter_next(object->hashtable, iter); +} + +const char *json_object_iter_key(void *iter) +{ + if(!iter) + return NULL; + + return (const char *)hashtable_iter_key(iter); +} + +json_t *json_object_iter_value(void *iter) +{ + if(!iter) + return NULL; + + return (json_t *)hashtable_iter_value(iter); }