在現代Web應用程序中,JSON已成為一種常見的數據格式。在C語言中,有許多庫可以用于解析JSON數據,包括cJSON、JSMN、json-parser等。
在這里我們將使用cJSON這個輕量級的JSON解析庫來解析JSON數據。首先,需要下載并安裝cJSON庫。然后,我們可以使用以下代碼來解析示例JSON數據:
#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行定義了一個JSON字符串。第4行使用cJSON_Parse函數將字符串解析成JSON對象。如果解析失敗,cJSON_Parse函數將返回NULL。如果解析成功,我們可以使用各種cJSON_Get*函數來訪問JSON對象中的數據。在上面的示例中,我們使用cJSON_GetObjectItemCaseSensitive函數來獲取JSON對象中指定名稱的對象。如果對象存在且符合指定的類型,我們可以通過value*成員來獲取其值。
cJSON庫不僅支持基本的JSON數據類型,如字符串和數字,還支持嵌套的JSON對象和數組。我們可以使用各種cJSON函數來遍歷JSON對象和數組,并訪問它們的成員。詳情請參閱cJSON文檔。