X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Futils-json.c;h=3af2a4cff7683744335ca4d65b1ba5657a87ae48;hb=6b3c3b1916b0af0494041c12a3c86819e441105e;hp=82908f48c3c51d0a7d860e799863e48986e70208;hpb=bf650bc39188c86cec8a11097f2c341e3f1b54b1;p=src%2Fapp-framework-main.git diff --git a/src/utils-json.c b/src/utils-json.c index 82908f4..3af2a4c 100644 --- a/src/utils-json.c +++ b/src/utils-json.c @@ -22,57 +22,75 @@ #include "utils-json.h" -int j_object(struct json_object *obj, const char *key, struct json_object **value) +int j_read_string(struct json_object *obj, const char **value) +{ + return j_is_string(obj) && (*value = json_object_get_string(obj)) != NULL; +} + +int j_read_boolean(struct json_object *obj, int *value) +{ + return j_is_boolean(obj) && ((*value = (int)json_object_get_boolean(obj)), 1); +} + +int j_read_integer(struct json_object *obj, int *value) +{ + return j_is_integer(obj) && ((*value = (int)json_object_get_int(obj)), 1); +} + +const char *j_string(struct json_object *obj, const char *defval) +{ + return j_is_string(obj) ? json_object_get_string(obj) : defval; +} + +int j_boolean(struct json_object *obj, int defval) +{ + return j_is_boolean(obj) ? json_object_get_boolean(obj) : defval; +} + +int j_integer(struct json_object *obj, int defval) +{ + return j_is_integer(obj) ? json_object_get_int(obj) : defval; +} + +int j_read_object_at(struct json_object *obj, const char *key, struct json_object **value) { return json_object_object_get_ex(obj, key, value); } -int j_string(struct json_object *obj, const char *key, const char **value) +int j_read_string_at(struct json_object *obj, const char *key, const char **value) { json_object *data; - return j_object(obj, key, &data) - && json_object_get_type(data) == json_type_string - && (*value = json_object_get_string(data)) != NULL; + return j_read_object_at(obj, key, &data) && j_read_string(data, value); } -int j_boolean(struct json_object *obj, const char *key, int *value) +int j_read_boolean_at(struct json_object *obj, const char *key, int *value) { json_object *data; - return json_object_object_get_ex(obj, key, &data) - && json_object_get_type(data) == json_type_boolean - && ((*value = (int)json_object_get_boolean(data)), 1); + return j_read_object_at(obj, key, &data) && j_read_boolean(data, value); } -int j_integer(struct json_object *obj, const char *key, int *value) +int j_read_integer_at(struct json_object *obj, const char *key, int *value) { json_object *data; - return json_object_object_get_ex(obj, key, &data) - && json_object_get_type(data) == json_type_int - && ((*value = (int)json_object_get_int(data)), 1); + return j_read_object_at(obj, key, &data) && j_read_integer(data, value); } -const char *j_get_string(struct json_object *obj, const char *key, const char *defval) +const char *j_string_at(struct json_object *obj, const char *key, const char *defval) { - struct json_object *o; - return json_object_object_get_ex(obj, key, &o) - && json_object_get_type(o) == json_type_string - ? json_object_get_string(o) : defval; + struct json_object *data; + return j_read_object_at(obj, key, &data) ? j_string(data, defval) : defval; } -int j_get_boolean(struct json_object *obj, const char *key, int defval) +int j_boolean_at(struct json_object *obj, const char *key, int defval) { - struct json_object *o; - return json_object_object_get_ex(obj, key, &o) - && json_object_get_type(o) == json_type_boolean - ? json_object_get_boolean(o) : defval; + struct json_object *data; + return j_read_object_at(obj, key, &data) ? j_boolean(data, defval) : defval; } -int j_get_integer(struct json_object *obj, const char *key, int defval) +int j_integer_at(struct json_object *obj, const char *key, int defval) { - struct json_object *o; - return json_object_object_get_ex(obj, key, &o) - && json_object_get_type(o) == json_type_int - ? json_object_get_int(o) : defval; + struct json_object *data; + return j_read_object_at(obj, key, &data) ? j_integer(data, defval) : defval; } int j_add(struct json_object *obj, const char *key, struct json_object *val)