kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

use_cjson.c (1710B)


      1 /* use_cjson.c — exercise cJSON parse / navigate / build / serialize.
      2  * Output is deterministic (no pointers, no RNG, no hash iteration). */
      3 #include "cJSON.h"
      4 #include <stdio.h>
      5 #include <stdlib.h>
      6 #include <string.h>
      7 
      8 int main(void) {
      9   const char *src =
     10       "{\"name\":\"kit\",\"ok\":true,\"nums\":[3,1,2],"
     11       "\"meta\":{\"v\":42,\"tags\":[\"a\",\"b\"]}}";
     12 
     13   cJSON *root = cJSON_Parse(src);
     14   if (!root) {
     15     printf("parse-fail\n");
     16     return 1;
     17   }
     18 
     19   cJSON *name = cJSON_GetObjectItemCaseSensitive(root, "name");
     20   cJSON *ok = cJSON_GetObjectItemCaseSensitive(root, "ok");
     21   cJSON *nums = cJSON_GetObjectItemCaseSensitive(root, "nums");
     22   cJSON *meta = cJSON_GetObjectItemCaseSensitive(root, "meta");
     23   cJSON *v = cJSON_GetObjectItemCaseSensitive(meta, "v");
     24 
     25   printf("name=%s ok=%d v=%d nlen=%d\n", cJSON_GetStringValue(name),
     26          cJSON_IsTrue(ok), (int)cJSON_GetNumberValue(v),
     27          cJSON_GetArraySize(nums));
     28 
     29   int sum = 0;
     30   cJSON *it = NULL;
     31   cJSON_ArrayForEach(it, nums) sum += (int)cJSON_GetNumberValue(it);
     32   printf("nums-sum=%d\n", sum);
     33 
     34   /* Build a fresh document and round-trip it. */
     35   cJSON *out = cJSON_CreateObject();
     36   cJSON_AddStringToObject(out, "lib", "cJSON");
     37   cJSON_AddNumberToObject(out, "answer", 42);
     38   cJSON *arr = cJSON_AddArrayToObject(out, "seq");
     39   for (int i = 1; i <= 4; i++) cJSON_AddItemToArray(arr, cJSON_CreateNumber(i * i));
     40   char *printed = cJSON_PrintUnformatted(out);
     41   printf("built=%s\n", printed);
     42 
     43   cJSON *re = cJSON_Parse(printed);
     44   printf("reparse-answer=%d\n",
     45          (int)cJSON_GetNumberValue(cJSON_GetObjectItem(re, "answer")));
     46 
     47   free(printed);
     48   cJSON_Delete(re);
     49   cJSON_Delete(out);
     50   cJSON_Delete(root);
     51   return 0;
     52 }