Skip to content
Snippets Groups Projects
Commit 47bf50f5 authored by Jakob Olsson's avatar Jakob Olsson
Browse files

overwrite nested arrays when necessary

parent 883e0740
Branches
No related tags found
No related merge requests found
......@@ -234,7 +234,7 @@ int add_val(struct json_object *ptr, char *key, char *val, enum json_type type)
int set_by_string(struct json_object **src, char *fmt, char *val, enum json_type type)
{
struct json_object *ptr, *tmp;
struct json_object *ptr, *outer_obj, *tmp;
const char *delimiter = ".";
char fmt_cpy[1024] = {0}, parsed_key[32] = {0};
char *p, *key = fmt;
......@@ -249,7 +249,7 @@ int set_by_string(struct json_object **src, char *fmt, char *val, enum json_type
printf("format = %s\n", fmt);
printf("set val = %s\n", val);
ptr = tmp = *src;
ptr = outer_obj = *src;
if (!fmt)
goto add_key;
......@@ -273,21 +273,30 @@ int set_by_string(struct json_object **src, char *fmt, char *val, enum json_type
/* if we need to step further and currently marked value isnt an object, we need to overwrite it */
json_object_object_get_ex(tmp, parsed_key, &ptr);
json_object_object_get_ex(outer_obj, parsed_key, &ptr);
if (!json_object_is_type(ptr, json_type_object) && !json_object_is_type(ptr, json_type_array)) {
ptr = json_object_new_object();
json_object_object_add(tmp, parsed_key, ptr);
json_object_object_add(outer_obj, parsed_key, ptr);
}
/* TODO: make enums for rv of get_idx */
if (len > 0) {
for (int i = 0; i < len; i++) {
printf("%s %d, ptr = %s\n", __func__, __LINE__, json_object_get_string(ptr));
if (ptr && json_object_get_type(ptr) == json_type_array) {
printf("%s %d\n", __func__, __LINE__);
if (idx[i] > -1 && idx[i] < json_object_array_length(ptr))
ptr = json_object_array_get_idx(ptr, idx[i]);
if (idx[i] > -1 && idx[i] < json_object_array_length(ptr)) {
tmp = json_object_array_get_idx(ptr, idx[i]);
if (!json_object_is_type(tmp, json_type_object)) {
struct json_object *obj = json_object_new_object();
if (!obj)
return -1;
json_object_array_put_idx(ptr, idx[i], obj);
tmp = json_object_array_get_idx(ptr, idx[i]);
}
ptr = tmp;
}
else {
printf("%s %d\n", __func__, __LINE__);
if (i == len - 1)
......@@ -300,16 +309,16 @@ int set_by_string(struct json_object **src, char *fmt, char *val, enum json_type
}
} else {
ptr = json_object_new_array();
printf("%s %d type=%s, ptr_type=%s\n", __func__, __LINE__, json_type_to_name(json_object_get_type(tmp)), json_type_to_name(json_object_get_type(ptr)));
printf("tmp=%s\n", json_object_get_string(tmp));
printf("%s %d type=%s, ptr_type=%s\n", __func__, __LINE__, json_type_to_name(json_object_get_type(outer_obj)), json_type_to_name(json_object_get_type(ptr)));
printf("outer_obj=%s\n", json_object_get_string(outer_obj));
printf("ptr=%s\n", json_object_get_string(ptr));
printf("key=%s\n", key);
json_object_object_add(tmp, parsed_key, ptr);
json_object_object_add(outer_obj, parsed_key, ptr);
if (i == len - 1) {
json_object_array_add(ptr, json_object_new_object());
ptr = json_object_array_get_idx(ptr, json_object_array_length(ptr) - 1);
}
//json_object_array_add(tmp, ptr);
//json_object_array_add(outer_obj, ptr);
}
}
}
......@@ -317,16 +326,16 @@ int set_by_string(struct json_object **src, char *fmt, char *val, enum json_type
/* create key object if it does not exist */
if (!ptr) {
ptr = json_object_new_object();
if (json_object_get_type(tmp) == json_type_array)
json_object_array_add(tmp, ptr);
else if (json_object_get_type(tmp) == json_type_object)
json_object_object_add(tmp, parsed_key, ptr);
if (json_object_get_type(outer_obj) == json_type_array)
json_object_array_add(outer_obj, ptr);
else if (json_object_get_type(outer_obj) == json_type_object)
json_object_object_add(outer_obj, parsed_key, ptr);
printf("%s %d: ptr=%s\n", __func__, __LINE__, json_object_get_string(ptr));
printf("%s %d: tmp=%s\n", __func__, __LINE__, json_object_get_string(tmp));
printf("%s %d: outer_obj=%s\n", __func__, __LINE__, json_object_get_string(outer_obj));
}
}
tmp = ptr;
outer_obj = ptr;
}
printf("%s %d key=%s\n", __func__, __LINE__, parsed_key);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment