JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式,由于其簡(jiǎn)單、易于解析、易于生成和易于讀取,近年來被廣泛應(yīng)用于數(shù)據(jù)傳輸。在C語言中,解析JSON數(shù)據(jù)可以用多種方式,本文將主要介紹使用第三方庫cJSON的方法。
cJSON是一種用純C實(shí)現(xiàn)的輕量級(jí)JSON解析庫,可以通過簡(jiǎn)單的API調(diào)用有效地解析JSON數(shù)據(jù)。其API函數(shù)包括創(chuàng)建、添加、修改、查詢、釋放等操作。
#include <cJSON.h>
#include <stdio.h>
int main()
{
const char* json_str = "{\\\"name\\\":\\\"Tom\\\",\\\"age\\\":18}";
cJSON* root = cJSON_Parse(json_str);
if (!root)
{
printf("Parse failed!\n");
return 1;
}
cJSON* name = cJSON_GetObjectItem(root, "name");
if (!name)
{
printf("Can't find name!\n");
cJSON_Delete(root);
return 1;
}
cJSON* age = cJSON_GetObjectItem(root, "age");
if (!age)
{
printf("Can't find age!\n");
cJSON_Delete(root);
return 1;
}
printf("name=%s, age=%d\n", name->valuestring, age->valueint);
cJSON_Delete(root);
return 0;
}
在上述代碼中,我們通過cJSON_Parse()函數(shù)將json字符串解析為一個(gè)cJSON對(duì)象root。若該函數(shù)返回NULL,則說明解析失敗。接下來,我們通過cJSON_GetObjectItem()函數(shù)遍歷找到相應(yīng)的JSON鍵值對(duì),并通過valuestring和valueint屬性獲取其對(duì)應(yīng)的字符串和數(shù)值。最后,我們調(diào)用cJSON_Delete()函數(shù)釋放所分配的內(nèi)存。
使用cJSON解析JSON數(shù)據(jù)簡(jiǎn)單、高效,是目前廣泛使用的一種方法。需要注意的是,在實(shí)際開發(fā)過程中應(yīng)加入異常處理、內(nèi)存泄漏等措施,以確保代碼的穩(wěn)定性和可靠性。