JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式,因其簡(jiǎn)潔易懂的格式、廣泛的應(yīng)用而成為了互聯(lián)網(wǎng)行業(yè)的數(shù)據(jù)交換標(biāo)準(zhǔn)。而解析 JSON 數(shù)據(jù)是很常見的一種操作。C 語(yǔ)言沒有原生的 JSON 解析庫(kù),但是可以使用第三方庫(kù)進(jìn)行解析,比如常用的 cJSON 庫(kù)。
cJSON 是一個(gè)輕量級(jí)的 JSON 解析庫(kù),它可以通過一些簡(jiǎn)單的函數(shù)調(diào)用來解析 JSON 數(shù)據(jù)。該庫(kù)可以支持的數(shù)據(jù)類型包括:null,true 和 false,數(shù)字,字符串,數(shù)組和對(duì)象等。
// 解析 JSON 字符串 const char *json_str = "{\"name\":\"Tom\",\"age\":22}"; cJSON *json = cJSON_Parse(json_str); if (json != NULL) { cJSON *name = cJSON_GetObjectItemCaseSensitive(json, "name"); cJSON *age = cJSON_GetObjectItemCaseSensitive(json, "age"); if (cJSON_IsString(name) && cJSON_IsNumber(age)) { printf("name: %s, age: %d\n", name->valuestring, age->valueint); } cJSON_Delete(json); } // 創(chuàng)建 JSON 對(duì)象 cJSON *json = cJSON_CreateObject(); cJSON_AddStringToObject(json, "name", "Tom"); cJSON_AddNumberToObject(json, "age", 22); char *json_str = cJSON_Print(json); printf("%s\n", json_str); cJSON_Delete(json);
如上述示例代碼所示,我們可以通過cJSON_Parse()
函數(shù)將一個(gè) JSON 字符串解析成 cJSON 對(duì)象,然后通過cJSON_GetObjectItemCaseSensitive()
函數(shù)根據(jù) key 去獲取相應(yīng)的 value 值。同樣地,我們也可以使用cJSON_CreateObject()
函數(shù)創(chuàng)建一個(gè) cJSON 對(duì)象,然后通過cJSON_AddXXXToObject()
函數(shù)給對(duì)象添加元素,最后通過cJSON_Print()
函數(shù)將對(duì)象轉(zhuǎn)化成 JSON 字符串。