From 6be9f7acaf02d0c71f905df7f110cc96642a281f Mon Sep 17 00:00:00 2001 From: Jakob Olsson <jakob.olsson@iopsys.eu> Date: Wed, 2 Oct 2019 15:19:14 +0200 Subject: [PATCH] update getter func --- api.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/api.c b/api.c index 5b02ef1..72c9ffc 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; } -- GitLab