C語言是一種面向過程的編程語言,它提供了很多操作數據的函數。而JSON是一種輕量級的數據交換格式,它常常被用于異構系統之間數據傳輸。因此,使用C語言解析JSON數據是一種非常有用的技能。
在C語言中,沒有內置的JSON解析庫。開發者可以選擇使用第三方庫,如jansson和cJSON。本篇文章將介紹如何使用cJSON解析JSON數據。
#include "cJSON.h" #include <stdlib.h> #include <stdio.h> int main() { char *json_str = "{\"name\":\"張三\",\"age\":18}"; 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_Delete(json); return 0; }
以上是一個簡單的代碼示例。首先,我們需要引入cJSON庫,并且在代碼中定義JSON格式的字符串。然后,我們使用cJSON_Parse函數將字符串解析成一個cJSON對象。如果解析失敗,cJSON_Parse函數會返回NULL。
接下來,我們使用cJSON_GetObjectItemCaseSensitive函數獲取JSON對象中的值。函數的第一個參數是一個已經解析好的JSON對象。第二個參數是需要獲取的鍵值。需要注意的是,在cJSON中,鍵值是一個字符串,因此需要用雙引號將其包圍。如果鍵值不存在,則函數返回NULL。
cJSON提供了很多類型判斷函數和獲取函數。我們可以使用cJSON_IsString判斷是否是字符串類型,使用cJSON_IsNumber判斷是否是數字類型。在獲取值時,我們可以使用valuestring或valueint分別獲取字符串和數字。
最后,我們使用cJSON_Delete函數釋放內存。