最近在學習C語言,發現很多應用程序都使用了JSON數據類型。JSON是一種輕量級的數據交換格式,它具有簡潔明了、易于讀寫和解析的特點。有了JSON,我們可以很方便地在不同的應用程序之間傳遞數據。
在C語言中,我們需要使用第三方庫來解析和生成JSON數據。比較常用的庫有cJSON和json-c。
下面我們來看一個簡單的例子,演示如何使用cJSON來生成和解析JSON數據。
#include "cJSON.h"
int main() {
/* 生成JSON數據 */
cJSON *root = cJSON_CreateObject(); // 創建一個JSON對象
cJSON_AddStringToObject(root, "name", "張三"); // 向對象中添加鍵值對
cJSON_AddNumberToObject(root, "age", 18);
char *json_str = cJSON_Print(root); // 將對象轉換為字符串
printf("%s\n", json_str);
free(json_str);
/* 解析JSON數據 */
char *json = "{\"name\": \"李四\", \"age\": 20}";
cJSON *json_obj = cJSON_Parse(json); // 解析JSON字符串
char *name = cJSON_GetObjectItem(json_obj, "name")->valuestring; // 從對象中獲取值
int age = cJSON_GetObjectItem(json_obj, "age")->valueint;
printf("姓名:%s,年齡:%d\n", name, age);
cJSON_Delete(json_obj); // 釋放內存
return 0;
}
上面的代碼中,我們首先使用cJSON_CreateObject函數創建了一個JSON對象,然后使用cJSON_AddXXOBJ函數向對象中添加鍵值對,最后使用cJSON_Print函數將對象轉換為字符串。我們在輸出字符串時需要注意,由于cJSON_Print函數是動態分配內存的,我們需要手動釋放內存。
接下來,我們使用cJSON_Parse函數解析了一個JSON字符串,并使用cJSON_GetObjectItem函數從對象中獲取值。注意,在獲取字符串值時需要使用cJSON_GetObjectItem(...)->valuestring的形式,而獲取數值時需要使用cJSON_GetObjectItem(...)->valueint的形式。
cJSON和json-c這兩個庫其實用法非常相似,主要區別在于函數名稱和參數的命名方式。學會了其中一個,另一個也就不難上手了。