Diff for /libelwix/example/test_json.c between versions 1.1.2.7 and 1.6

version 1.1.2.7, 2017/11/28 14:57:45 version 1.6, 2025/08/25 13:00:37
Line 10 Line 10
 int  int
 run_simple(json_t *json)  run_simple(json_t *json)
 {  {
        static const char *teststr = "{\"user\": \"johndoe\", { \"meow\", \"\", \"\aaa\"}, \"admin\": false, \"uid\": 1000, \"objects\" : { \"a\":\"1\", \"b\" : \"2\" ,\"c\" : \"3\", , \"oho\"},\n"        static const char *teststr = "[ \"test123\", {\"user\": \"johndoe\", { \"meow\", \"\", \"\aaa\"}, \"admin\": false, \"uid\": 1000, \"objects\" : { \"a\":\"1\", \"b\" : \"2\" ,\"c\" : \"3\", , \"oho\"},\n"
                                "\"groups\": [\"users\", \"\", \"wheel\", \"audio\", \"video\"], \"testend\":{\"x\" : \"8\", \"y\":\"7\", \"z\" : \"9\"}}";                "\"groups\": [\"users\", \"\", \"wheel\", \"audio\", \"video\"], \"testend\":{\"x\" : \"8\", \"y\":\"7\", \"z\" : \"9\"}} ]";
 //      static const char *teststr = "{}\n[]\n\"sdfsdf\"";  //      static const char *teststr = "{}\n[]\n\"sdfsdf\"";
         int i, ret;          int i, ret;
        jtok_t *tok, toks[36];        jtok_t *tok, toks[38];
         ait_val_t *v;          ait_val_t *v;
         char *str;          char *str;
         array_t *arr;          array_t *arr;
Line 49  run_simple(json_t *json) Line 49  run_simple(json_t *json)
         } else          } else
                 printf("(strict) We parsed %d tokens next=%lu\n", ret, json->h_next);                  printf("(strict) We parsed %d tokens next=%lu\n", ret, json->h_next);
   
        if (!(tok = json_findbykey(teststr, "boza s kosmi", toks, ret)))        if (!(tok = json_findbykey(teststr, "boza s kosmi", J_UNDEF, toks, ret)))
                 printf("Key=\"boza s kosmi\" not found!\n");                  printf("Key=\"boza s kosmi\" not found!\n");
        tok = json_findbykey(teststr, "user", toks, ret);        tok = json_findbykey(teststr, "user", J_UNDEF, toks, ret);
         if (tok) {          if (tok) {
                 v = json_token2val(teststr, tok);                  v = json_token2val(teststr, tok);
                 printf("Key=\"user\" data parent=%ld idx=%ld size=%ld type=%d %s\n", tok->tok_parent, tok->tok_idx, tok->tok_size, tok->tok_type, AIT_GET_STR(v));                  printf("Key=\"user\" data parent=%ld idx=%ld size=%ld type=%d %s\n", tok->tok_parent, tok->tok_idx, tok->tok_size, tok->tok_type, AIT_GET_STR(v));
                 ait_freeVar(&v);                  ait_freeVar(&v);
         }          }
        tok = json_findbykey(teststr, "admin", toks, ret);        tok = json_findbykey(teststr, "admin", J_VALUE, toks, ret);
         if (tok) {          if (tok) {
                 str = json_token2str(teststr, tok);                  str = json_token2str(teststr, tok);
                 printf("Key=\"admin\" data parent=%ld idx=%ld size=%ld type=%d %s\n", tok->tok_parent, tok->tok_idx, tok->tok_size, tok->tok_type, str);                  printf("Key=\"admin\" data parent=%ld idx=%ld size=%ld type=%d %s\n", tok->tok_parent, tok->tok_idx, tok->tok_size, tok->tok_type, str);
                 e_free(str);                  e_free(str);
         }          }
        tok = json_findbykey(teststr, "uid", toks, ret);        tok = json_findbykey(teststr, "uid", J_UNDEF, toks, ret);
         if (tok) {          if (tok) {
                 printf("Key=\"uid\" data parent=%ld idx=%ld size=%ld type=%d %ld\n", tok->tok_parent, tok->tok_idx, tok->tok_size, tok->tok_type,                   printf("Key=\"uid\" data parent=%ld idx=%ld size=%ld type=%d %ld\n", tok->tok_parent, tok->tok_idx, tok->tok_size, tok->tok_type, 
                                 json_token2num(teststr, tok));                                  json_token2num(teststr, tok));
                arr = json_token2array(teststr, tok);                arr = json_token2vars(teststr, tok);
                 for (i = 0; i < array_Size(arr); i++)                  for (i = 0; i < array_Size(arr); i++)
                        printf("arr[%d]=%s\n", i, AIT_GET_STR(array(arr, i, ait_val_t*)));                        printf("avars[%d]=%s\n", i, AIT_GET_STR(array(arr, i, ait_val_t*)));
                 ait_freeVars(&arr);                  ait_freeVars(&arr);
   
                   arr = json_token2array(teststr, tok);
                   for (i = 0; i < array_Size(arr); i++)
                           printf("arr[%d]=%s\n", i, array(arr, i, char*));
                   json_freearray(&arr);
         }          }
   
        tok = json_findbykey(teststr, "groups", toks, ret);        tok = json_findbykey(teststr, "groups", J_UNDEF, toks, ret);
         if (tok) {          if (tok) {
                 str = json_token2str(teststr, tok);                  str = json_token2str(teststr, tok);
                arr = json_token2array(teststr, tok);                arr = json_token2vars(teststr, tok);
                 printf("Key=\"groups\" data parent=%ld idx=%ld size=%ld type=%d %s\n", tok->tok_parent, tok->tok_idx, tok->tok_size, tok->tok_type, str);                  printf("Key=\"groups\" data parent=%ld idx=%ld size=%ld type=%d %s\n", tok->tok_parent, tok->tok_idx, tok->tok_size, tok->tok_type, str);
                 e_free(str);                  e_free(str);
                 for (i = 0; i < array_Size(arr); i++)                  for (i = 0; i < array_Size(arr); i++)
                        printf("arr[%d]=%s\n", i, AIT_GET_STR(array(arr, i, ait_val_t*)));                        printf("avars[%d]=%s\n", i, AIT_GET_STR(array(arr, i, ait_val_t*)));
                 ait_freeVars(&arr);                  ait_freeVars(&arr);
   
                   arr = json_token2array(teststr, tok);
                   for (i = 0; i < array_Size(arr); i++)
                           printf("arr[%d]=%s\n", i, array(arr, i, char*));
                   json_freearray(&arr);
         }          }
   
        tok = json_findbykey(teststr, "objects", toks, ret);        tok = json_findbykey(teststr, "objects", J_UNDEF, toks, ret);
         if (tok) {          if (tok) {
                 str = json_token2str(teststr, tok);                  str = json_token2str(teststr, tok);
                arr = json_token2array(teststr, tok);                arr = json_token2vars(teststr, tok);
                 printf("Key=\"objects\" data parent=%ld idx=%ld size=%ld type=%d %s\n", tok->tok_parent, tok->tok_idx, tok->tok_size, tok->tok_type, str);                  printf("Key=\"objects\" data parent=%ld idx=%ld size=%ld type=%d %s\n", tok->tok_parent, tok->tok_idx, tok->tok_size, tok->tok_type, str);
                 e_free(str);                  e_free(str);
                 for (i = 0; i < array_Size(arr); i++)                  for (i = 0; i < array_Size(arr); i++)
                        printf("arr[%d]=%s\n", i, AIT_GET_STR(array(arr, i, ait_val_t*)));                        printf("avars[%d]=%s\n", i, AIT_GET_STR(array(arr, i, ait_val_t*)));
                 ait_freeVars(&arr);                  ait_freeVars(&arr);
   
                   arr = json_token2array(teststr, tok);
                   for (i = 0; i < array_Size(arr); i++)
                           printf("arr[%d]=%s\n", i, array(arr, i, char*));
                   json_freearray(&arr);
         }          }
   
        tok = json_findbykey(teststr, "testend", toks, ret);        tok = json_findbykey(teststr, "testend", J_UNDEF, toks, ret);
         if (tok) {          if (tok) {
                 str = json_token2str(teststr, tok);                  str = json_token2str(teststr, tok);
                arr = json_token2array(teststr, tok);                arr = json_token2vars(teststr, tok);
                 printf("Key=\"testend\" data parent=%ld idx=%ld size=%ld type=%d %s\n", tok->tok_parent, tok->tok_idx, tok->tok_size, tok->tok_type, str);                  printf("Key=\"testend\" data parent=%ld idx=%ld size=%ld type=%d %s\n", tok->tok_parent, tok->tok_idx, tok->tok_size, tok->tok_type, str);
                 e_free(str);                  e_free(str);
                 for (i = 0; i < array_Size(arr); i++)                  for (i = 0; i < array_Size(arr); i++)
                        printf("arr[%d]=%s\n", i, AIT_GET_STR(array(arr, i, ait_val_t*)));                        printf("avars[%d]=%s\n", i, AIT_GET_STR(array(arr, i, ait_val_t*)));
                 ait_freeVars(&arr);                  ait_freeVars(&arr);
   
                   arr = json_token2array(teststr, tok);
                   for (i = 0; i < array_Size(arr); i++)
                           printf("arr[%d]=%s\n", i, array(arr, i, char*));
                   json_freearray(&arr);
         }          }
   
         return 0;          return 0;
Line 162  run_dump(json_t *json, char **args) Line 182  run_dump(json_t *json, char **args)
         f = fopen(args[1], "r");          f = fopen(args[1], "r");
         if (!f) {          if (!f) {
                 printf("fopen(%s) #%d - %s\n", *args, errno, strerror(errno));                  printf("fopen(%s) #%d - %s\n", *args, errno, strerror(errno));
                   return 1;
         }          }
   
         toks = e_malloc(sizeof(jtok_t));          toks = e_malloc(sizeof(jtok_t));
Line 217  again: Line 238  again:
 }  }
   
 int  int
   run_make()
   {
           char str[BUFSIZ];
           ait_val_t *v;
           array_t *arr;
   
           arr = ait_allocVars(4);
           v = ait_getVars(&arr, 0);
           AIT_SET_I16(v, 4444);
           v = ait_getVars(&arr, 1);
           AIT_SET_STR(v, "sezam");
           v = ait_getVars(&arr, 2);
           AIT_SET_U8(v, 0x1c);
           v = ait_getVars(&arr, 3);
           AIT_SET_STR(v, "0x45af");
   
           json_add_begin_object(str, sizeof str, 42);
           json_add_pair(str, sizeof str, 42, "boza", "s kosmi");
           json_add_comma(str, sizeof str, 42);
           json_add_string(str, sizeof str, 0, "number");
           json_add_colon(str, sizeof str, 42);
           json_add_value(str, sizeof str, 0, 1234567890);
           json_add_comma(str, sizeof str, 42);
           json_add_string(str, sizeof str, 0, "obj__");
           json_add_colon(str, sizeof str, 42);
           json_add_begin_object(str, sizeof str, 42);
           json_add_pair(str, sizeof str, 42, "subkey", "val0");
           json_add_end_object(str, sizeof str, 42);
           json_add_comma(str, sizeof str, 42);
           json_add_string(str, sizeof str, 0, "arr4e");
           json_add_colon(str, sizeof str, 42);
           json_add_array(str, sizeof str, 42, arr);
           json_add_end_object(str, sizeof str, 42);
           ait_freeVars(&arr);
   
           printf("%s\n", str);
           return 0;
   }
   
   int
   run_stdin(json_t *json)
   {
           char szJSON[BUFSIZ] = { [0 ... BUFSIZ - 1] = 0 };
           jtok_t *tok, toks[1024];
           int ret, scope;
           char *str;
   
           printf("Input JSON> ");
           fgets(szJSON, sizeof szJSON, stdin);
           printf("Readed JSON> %s", szJSON);
   
           json_init(json, 0);
           ret = json_parse(json, szJSON, strlen(szJSON), toks, sizeof toks/sizeof *toks);
           if (ret == -1) {
                   printf("Error:: #%d - %s\n", elwix_GetErrno(), elwix_GetError());
                   return 1;
           } else
                   printf("We parsed %d tokens next=%lu\n", ret, json->h_next);
   
           printf("dump=%d\n", json_dump(stdout, szJSON, toks, json->h_next, 0));
   
           tok = json_findbykey(szJSON, "aaa", J_STRING, toks, ret);
           if (tok) {
                   str = json_token2str(szJSON, tok);
                   if (str) {
                           printf("str=%s\n", str);
                           json_freestr(str);
                   }
           }
   
           printf("Default scope=%ld, scope for \"zzz\"=%ld\n", 
                           json_objscope(NULL, szJSON, toks, ret), 
                           (scope = json_objscope("zzz", szJSON, toks, ret)));
   
           tok = json_findbykeyatscope(0, szJSON, "t1", J_UNDEF, toks, ret);
           if (tok) {
                   str = json_token2str(szJSON, tok);
                   if (str) {
                           printf("default scope t1=%s\n", str);
                           json_freestr(str);
                   }
           }
           tok = json_findbykeyatscope(scope, szJSON, "t1", J_UNDEF, toks, ret);
           if (tok) {
                   str = json_token2str(szJSON, tok);
                   if (str) {
                           printf("scope=%ld object zzz t1=%s\n", scope, str);
                           json_freestr(str);
                   }
           }
   
           scope = json_objscope("z", szJSON, toks, ret);
           tok = json_findbykeyatscope(scope, szJSON, "t1", J_UNDEF, toks, ret);
           if (tok) {
                   str = json_token2str(szJSON, tok);
                   if (str) {
                           printf("scope=%ld object z t1=%s\n", scope, str);
                           json_freestr(str);
                   }
           }
   
           return 0;
   }
   
   int
 main(int argc, char **argv)  main(int argc, char **argv)
 {  {
         json_t json;          json_t json;
   
         if (argc < 2)          if (argc < 2)
                   return run_stdin(&json);
           else if (argc < 3)
                 return run_simple(&json);                  return run_simple(&json);
           else if (argc < 4)
                   return run_make();
         else          else
                 return run_dump(&json, argv);                  return run_dump(&json, argv);
   

Removed from v.1.1.2.7  
changed lines
  Added in v.1.6


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>