C語言中的JSON庫有很多,其中比較常用的是 cJSON 庫。cJSON 提供了一些 API 來創(chuàng)建、解析和釋放 JSON 數(shù)據(jù)。下面我們看一個簡單的實(shí)例:
#include <stdio.h> #include <cjson/cJSON.h> int main() { // 創(chuàng)建 JSON 對象 cJSON *root = cJSON_CreateObject(); cJSON *array = cJSON_CreateArray(); cJSON *item1 = cJSON_CreateString("apple"); cJSON *item2 = cJSON_CreateString("banana"); cJSON_AddItemToArray(array, item1); cJSON_AddItemToArray(array, item2); cJSON_AddItemToObject(root, "fruits", array); // 將 JSON 對象轉(zhuǎn)為字符串 char *json_str = cJSON_Print(root); printf("%s\n", json_str); // 解析字符串為 JSON 對象 cJSON *root2 = cJSON_Parse(json_str); cJSON *array2 = cJSON_GetObjectItem(root2, "fruits"); cJSON *item3 = cJSON_GetArrayItem(array2, 0); printf("%s\n", item3->valuestring); // 釋放 JSON 對象 cJSON_Delete(root); cJSON_Delete(root2); free(json_str); return 0; }
上面的代碼中,我們創(chuàng)建了一個 JSON 對象,并添加一個名為 fruits 的數(shù)組。然后將該 JSON 對象轉(zhuǎn)為字符串,輸出到控制臺。接著將該 JSON 字符串解析為 JSON 對象,獲取 fruits 數(shù)組的第一個元素并輸出。最后釋放 JSON 對象和 JSON 字符串。
在實(shí)際開發(fā)中,我們可能需要套用多層 JSON 數(shù)據(jù)。那么我們可以使用 cJSON 庫提供的遞歸函數(shù)來處理。例如下面的代碼:
// 創(chuàng)建 JSON 對象 cJSON *root = cJSON_CreateObject(); cJSON *subroot = cJSON_CreateObject(); cJSON_AddItemToObject(root, "subobj", subroot); // 添加數(shù)據(jù)到子對象 cJSON_AddStringToObject(subroot, "name", "John"); cJSON_AddNumberToObject(subroot, "age", 25); cJSON *subarray = cJSON_CreateArray(); cJSON *subobj = cJSON_CreateObject(); cJSON_AddItemToArray(subarray, subobj); cJSON_AddStringToObject(subobj, "name", "green"); cJSON_AddNumberToObject(subobj, "age", 22); cJSON_AddItemToObject(subroot, "friends", subarray); // 將 JSON 對象轉(zhuǎn)為字符串 char *json_str = cJSON_Print(root); printf("%s\n", json_str); // 釋放 JSON 對象 cJSON_Delete(root); free(json_str);
上面的代碼中,我們創(chuàng)建了一個 JSON 對象,其中包括一個名為 subobj 的子對象,以及該子對象的相關(guān)數(shù)據(jù)。子對象也可能包含子對象和數(shù)組。最后將該 JSON 對象轉(zhuǎn)為字符串,輸出到控制臺。