JSON 是一種輕量級的數(shù)據(jù)交換格式,廣泛應(yīng)用于 Web 應(yīng)用程序中。在 C 語言中,我們通常使用第三方庫來處理 JSON 數(shù)據(jù)。以下是一些流行的 C JSON 庫:
- cJSON - Jansson - YAJL
cJSON 是最流行的 C JSON 庫之一。它易于使用并且非常輕便。以下是一個使用 cJSON 庫解析 JSON 數(shù)據(jù)的示例:
#include <stdio.h>#include <cJSON.h>int main() { char *json_string = "{\"name\": \"Alice\",\"age\": 21}"; cJSON *root = cJSON_Parse(json_string); if (root == NULL) { printf("Error: cJSON_Parse failed.\n"); return 1; } cJSON *name = cJSON_GetObjectItemCaseSensitive(root, "name"); cJSON *age = cJSON_GetObjectItemCaseSensitive(root, "age"); printf("Name: %s\n", name->valuestring); printf("Age: %d\n", age->valueint); cJSON_Delete(root); return 0; }
上述代碼使用了 cJSON_Parse 函數(shù)將 JSON 字符串解析為 cJSON 對象。接下來,我們使用 cJSON_GetObjectItemCaseSensitive 函數(shù)獲取 root 對象中具有指定名稱的子對象。最后,我們使用 cJSON 對象中具體的 value* 字段來訪問子對象的值。
除了解析 JSON 數(shù)據(jù)之外,我們還可以使用 cJSON 庫生成 JSON 數(shù)據(jù)。以下是一個使用 cJSON 庫生成 JSON 數(shù)據(jù)的示例:
#include <stdio.h>#include <cJSON.h>int main() { cJSON *root = cJSON_CreateObject(); cJSON_AddStringToObject(root, "name", "Alice"); cJSON_AddNumberToObject(root, "age", 21); cJSON_AddItemToObject(root, "grades", cJSON_CreateIntArray((const int[]) {80, 90, 100}, 3)); char *json_string = cJSON_Print(root); printf("JSON String: %s\n", json_string); cJSON_Delete(root); free(json_string); return 0; }
上述代碼使用了 cJSON_CreateObject 函數(shù)創(chuàng)建了一個空的 cJSON 對象,并使用 cJSON_Add*ToObject 函數(shù)將子對象添加到 root 對象中。最后,我們使用 cJSON_Print 函數(shù)將 cJSON 對象轉(zhuǎn)換為 JSON 字符串。
總之,cJSON 是一種有效的處理 JSON 數(shù)據(jù)的 C 庫。它易于使用并且非常輕便,使其成為許多 C 開發(fā)人員首選的 JSON 庫之一。