在現(xiàn)代Web應(yīng)用程序中,JSON已成為一種常見(jiàn)的數(shù)據(jù)格式。在C語(yǔ)言中,有許多庫(kù)可以用于解析JSON數(shù)據(jù),包括cJSON、JSMN、json-parser等。
在這里我們將使用cJSON這個(gè)輕量級(jí)的JSON解析庫(kù)來(lái)解析JSON數(shù)據(jù)。首先,需要下載并安裝cJSON庫(kù)。然后,我們可以使用以下代碼來(lái)解析示例JSON數(shù)據(jù):
#include <stdio.h>#include <cjson/cJSON.h>int main() { char* json_str = "{ \"name\":\"Jack\", \"age\":30, \"city\":\"New York\" }"; cJSON* json = cJSON_Parse(json_str); if (json == NULL) { printf("Error before: [%s]\n", cJSON_GetErrorPtr()); return 1; } cJSON* name = cJSON_GetObjectItemCaseSensitive(json, "name"); if (cJSON_IsString(name) && (name->valuestring != NULL)) { printf("Name: %s\n", name->valuestring); } cJSON* age = cJSON_GetObjectItemCaseSensitive(json, "age"); if (cJSON_IsNumber(age)) { printf("Age: %d\n", age->valueint); } cJSON* city = cJSON_GetObjectItemCaseSensitive(json, "city"); if (cJSON_IsString(city) && (city->valuestring != NULL)) { printf("City: %s\n", city->valuestring); } cJSON_Delete(json); return 0; }
代碼中的第3行定義了一個(gè)JSON字符串。第4行使用cJSON_Parse函數(shù)將字符串解析成JSON對(duì)象。如果解析失敗,cJSON_Parse函數(shù)將返回NULL。如果解析成功,我們可以使用各種cJSON_Get*函數(shù)來(lái)訪問(wèn)JSON對(duì)象中的數(shù)據(jù)。在上面的示例中,我們使用cJSON_GetObjectItemCaseSensitive函數(shù)來(lái)獲取JSON對(duì)象中指定名稱的對(duì)象。如果對(duì)象存在且符合指定的類型,我們可以通過(guò)value*成員來(lái)獲取其值。
cJSON庫(kù)不僅支持基本的JSON數(shù)據(jù)類型,如字符串和數(shù)字,還支持嵌套的JSON對(duì)象和數(shù)組。我們可以使用各種cJSON函數(shù)來(lái)遍歷JSON對(duì)象和數(shù)組,并訪問(wèn)它們的成員。詳情請(qǐng)參閱cJSON文檔。