diff --git a/api.c b/api.c index 5b02ef10b5c16990d3687ea39d949c06fe64f1c7..72c9ffce289e71dad9119fc2624b6ec2a35ec7a4 100644 --- a/api.c +++ b/api.c @@ -102,7 +102,7 @@ int get_idx(char *key, int *idx, char *out) } strncpy(out, buffer, 31); - printf("%s %d, out=%s, buffer=%s", __func__, __LINE__, out, buffer); + printf("%s %d, out=%s, buffer=%s\n", __func__, __LINE__, out, buffer); return len; } @@ -386,11 +386,27 @@ struct json_object *get(struct json_object *src, char *fmt) struct json_object *ptr, *tmp = src; const char *delimiter = "."; char fmt_cpy[1024] = {0}; + char parsed_key[32] = {0}; + int idx[32]; strcpy(fmt_cpy, fmt); - for (char *p = strtok(fmt_cpy,delimiter); p != NULL; p = strtok(NULL, delimiter)) { - json_object_object_get_ex(tmp, p, &ptr); + for (char *key = strtok(fmt_cpy,delimiter); key != NULL; key = strtok(NULL, delimiter)) { + int len = 0; + len = get_idx(key, idx, parsed_key); + json_object_object_get_ex(tmp, parsed_key, &ptr); + + printf("%s %d ptr = %s\n", __func__, __LINE__, json_object_get_string(ptr)); + + for (int i = 0; i < len; i++) { + if (!json_object_is_type(ptr, json_type_array)) + return NULL; + + int index = (idx[i] == -1 ? json_object_array_length(ptr) -1 : idx[i]); + ptr = json_object_array_get_idx(ptr, index); + printf("%s %d ptr = %s\n", __func__, __LINE__, json_object_get_string(ptr)); + } + tmp = ptr; }