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 }