Skip to content

Commit

Permalink
Added set value
Browse files Browse the repository at this point in the history
  • Loading branch information
TimoLassmann committed Jul 12, 2024
1 parent 6fb3f33 commit ca6da80
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 1 deletion.
45 changes: 44 additions & 1 deletion src/json/tld-json.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ static int tld_json_dump_val(tld_json_val *val, tld_strbuf *b);
static int tld_json_add_indent(tld_strbuf *b, int indent);
/* static int tld_json_get_ret_val(tld_json_val *v, tld_json_ret **ret); */
/* static int tld_json_get_arr_str(tld_json_arr *n, char *key, tld_json_val **res); */
static int tld_json_get_arr_str(tld_json_arr *n, char *key, tld_json_obj* res);
static int tld_json_get_arr_str(tld_json_arr *n, char *key, tld_json_obj *res);

static int tld_json_set_arr_val(tld_json_arr *n, char *key, tld_json_val *v);
/* static int tld_json_get_arr_str(tld_json_arr *n, char *key, tld_strbuf *res); */
static int tld_json_parse_obj(tld_json_arr *lex, tld_json_obj **out);
static int tld_json_parse_arr(tld_json_arr *lex, tld_json_arr **out);
Expand Down Expand Up @@ -207,6 +209,47 @@ tld_json_arr* tld_json_arr_add_obj(tld_json_arr *arr, tld_json_obj*val)
return arr;
}

int tld_json_set_val(tld_json_obj *n, char *key, tld_json_val *v)
{
if(n){
for(int i = 0; i < n->n;i++){
int len = strnlen(key, 256);
/* fprintf(stdout,"NAME: %s LEN: %d %d\n",TLD_STR(n->key[i]),n->key[i]->len,len); */
if(len == n->key[i]->len){
if(strncmp((char*)n->key[i]->str, key, n->key[i]->len)==0){
tld_json_val_copy(n->v[i], v);
tld_json_obj_chk_space(n);
break;
}
}

if(n->v[i]->type == TLD_JSON_ARR){
tld_json_set_arr_val(n->v[i]->value.arr,key,v);
}else if(n->v[i]->type == TLD_JSON_OBJ){
tld_json_set_val(n->v[i]->value.obj, key,v);
}
}
}

return OK;
ERROR:
return FAIL;
}

int tld_json_set_arr_val(tld_json_arr *n, char *key, tld_json_val *v)
{
if(n){
for(int i = 0; i < n->n;i++){
if(n->v[i]->type == TLD_JSON_ARR){
tld_json_set_arr_val(n->v[i]->value.arr,key,v);
}else if(n->v[i]->type == TLD_JSON_OBJ){
tld_json_set_val(n->v[i]->value.obj, key,v);
}
}
}
return OK;
}


int tld_json_search(tld_json_obj *n, char *key, tld_json_obj **ret)
{
Expand Down
1 change: 1 addition & 0 deletions src/json/tld-json.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ EXTERN int tld_json_parse(tld_strbuf *t, tld_json_obj **out);
EXTERN int tld_json_search(tld_json_obj *n, char *key, tld_json_obj **ret);
/* EXTERN int tld_json_obj_get_str(tld_json_obj *n, char *key, tld_strbuf* res); */
/* EXTERN int tld_json_obj_get(tld_json_obj *n, char *key, tld_json_val **ret); */
EXTERN int tld_json_set_val(tld_json_obj *n, char *key, tld_json_val *v);



Expand Down
13 changes: 13 additions & 0 deletions tests/utests/unit_json.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ int test_parser(void);
int test_parser2(void);
int test_parser_list(void);
int test_create(void);

int main(int argc, char *argv[])
{
test_parser2();
Expand Down Expand Up @@ -180,6 +181,18 @@ int test_create(void)
fprintf(stdout,"%s\n", TLD_STR(b));

LOG_MSG("Create a JSON OBJECT with a NULL schema - Done");
tld_json_val* v = NULL;
tld_json_val_alloc(&v);
v->type = TLD_JSON_STR;
tld_strbuf_alloc(&v->value.str, 64);
tld_append(v->value.str, "AGARGAGAGA");
tld_json_set_val(n, "type", v);
tld_json_val_free(v);
tld_json_dump(n, b, 0);
fprintf(stdout,"%s\n", TLD_STR(b));

LOG_MSG("Create a JSON OBJECT with a NULL schema - Done");

tld_json_obj_free(n);

tld_strbuf_clear(b);
Expand Down

0 comments on commit ca6da80

Please sign in to comment.