在使用 C 語(yǔ)言來(lái)進(jìn)行 http 請(qǐng)求時(shí),我們經(jīng)常會(huì)收到 json 格式的數(shù)據(jù),因此了解如何解析 json 數(shù)據(jù)是非常重要的。下面我們就來(lái)看一下如何使用 C 語(yǔ)言解析 json 數(shù)據(jù)。
//定義 json 數(shù)據(jù) const char *json_string = "{ \"name\": \"Tom\", \"age\": 20, \"address\": { \"city\": \"Shanghai\", \"street\": \"XXX Road\" } }"; //解析 json 數(shù)據(jù) cJSON *json = cJSON_Parse(json_string); if (json == NULL) { printf("Error before: [%s]\n", cJSON_GetErrorPtr()); } else { //獲取 json 值 printf("name: %s\n", cJSON_GetObjectItem(json, "name")->valuestring); printf("age: %d\n", cJSON_GetObjectItem(json, "age")->valueint); printf("address.city: %s\n", cJSON_GetObjectItem(cJSON_GetObjectItem(json, "address"), "city")->valuestring); //釋放 json 內(nèi)存 cJSON_Delete(json); }
在上述代碼中,我們首先定義了 json 數(shù)據(jù),然后使用 cJSON_Parse 函數(shù)將其解析并賦值給 json 變量,如果出現(xiàn)解析錯(cuò)誤,則打印錯(cuò)誤信息。接下來(lái),我們使用 cJSON_GetObjectItem 函數(shù)獲取 name、age 和 address.city 的值,并打印輸出。最后,我們使用 cJSON_Delete 函數(shù)釋放 json 對(duì)象的內(nèi)存。
需要注意的是,在使用 cJSON_GetObjectItem 函數(shù)獲取 json 值時(shí),需要正確的傳入 json 對(duì)象以及對(duì)應(yīng)的 key 值。如果 key 值不存在,將會(huì)返回 NULL。