cJson是一個小巧的C語言JSON解析器,其核心文件cJSON.c和cJSON.h只有兩個文件,可以方便地集成到嵌入式設(shè)備或者其他C語言程序中。下面我們來介紹一下如何使用cJson庫來解析JSON數(shù)據(jù)。
首先需要安裝cJson庫,將cJSON.c和cJSON.h兩個文件加入到工程中,并且include"cJSON.h"即可。
#include "cJSON.h" #includeint main() { /* 首先定義一個json對象 */ cJSON *root = NULL; /* 獲取根節(jié)點(diǎn)對象 */ root = cJSON_Parse("{\"name\":\"Jack\", \"age\":25}"); /* 如果解析成功 */ if (root != NULL) { /* 獲取name子節(jié)點(diǎn)的值 */ cJSON *name = cJSON_GetObjectItem(root, "name"); printf("name: %s\n", name->valuestring); /* 獲取age子節(jié)點(diǎn)的值 */ cJSON *age = cJSON_GetObjectItem(root, "age"); printf("age: %d\n", age->valueint); /* 釋放json對象 */ cJSON_Delete(root); } return 0; }
以上代碼首先定義了一個json對象root,通過調(diào)用cJSON_Parse解析JSON數(shù)據(jù),解析成功后就可以通過cJSON_GetObjectItem函數(shù)來獲取子節(jié)點(diǎn)的值了,最后再調(diào)用cJSON_Delete釋放json對象即可。需要注意的是,獲取值的函數(shù)名字不同,比如獲取string類型的值是cJSON_GetObjectItemCaseSensitive,獲取int類型的值是cJSON_GetObjectItem。
在上面的代碼中,使用了一個json字符串當(dāng)做參數(shù)來解析JSON數(shù)據(jù),實(shí)際生產(chǎn)中數(shù)據(jù)的來源可能是網(wǎng)絡(luò)或者本地文件。此時我們可以使用網(wǎng)絡(luò)庫或者文件庫讀取數(shù)據(jù),然后調(diào)用cJSON_Parse解析,再通過cJSON_GetObjectItem獲取子節(jié)點(diǎn)的值。