This patch adds a function which can be used to update json key values on all levels, not just one, automagically adding new keys to objects which do not exist in old object. Signed-off-by: Roman Yeryomin --- a/src/value.c 2011-04-21 13:15:58.000000000 +0300 +++ b/src/value.c 2011-07-01 00:23:05.105103308 +0300 @@ -215,6 +215,41 @@ return 0; } +int json_object_deep_update(json_t *object, json_t *other) +{ + void *iter; + + if(!json_is_object(object) || !json_is_object(other)) + return -1; + + iter = json_object_iter(other); + while(iter) { + const char *key; + json_t *value; + + key = json_object_iter_key(iter); + value = json_object_iter_value(iter); + + if (!json_is_object(value)) { + if ( json_object_set_nocheck( object, key, value ) ) + return -1; + } else { + json_t *subobj = json_object_get(object, key); + if (!subobj) { + json_object_set_nocheck( object, key, value ); + iter = json_object_iter_next(other, iter); + continue; + } + if (json_object_deep_update( subobj, value ) == -1) + return -1; + } + + iter = json_object_iter_next(other, iter); + } + + return 0; +} + void *json_object_iter(json_t *json) { json_object_t *object;