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