JSON(JavaScript Object Notation,簡稱 JSON)是一種輕量級的數據交換格式,具有良好的可讀性和易于解析的特點。在 C 語言中,我們可以使用 cJSON 庫進行 JSON 文件的讀寫。
#include <stdio.h> #include "cJSON.h" int main(void) { // 創建 JSON 對象 cJSON *root = cJSON_CreateObject(); // 往對象中添加屬性 cJSON_AddNumberToObject(root, "id", 1); cJSON_AddStringToObject(root, "name", "Tom"); cJSON *address = cJSON_AddObjectToObject(root, "address"); cJSON_AddStringToObject(address, "street", "Main St"); cJSON_AddStringToObject(address, "city", "New York"); // 將 JSON 對象轉化為字符串 char *json_str = cJSON_Print(root); // 輸出 JSON 字符串 printf("%s\n", json_str); // 從字符串中解析 JSON 對象 cJSON *new_obj = cJSON_Parse(json_str); // 從對象中讀取屬性 const cJSON *id = cJSON_GetObjectItemCaseSensitive(new_obj, "id"); printf("id: %d\n", id->valueint); const cJSON *name = cJSON_GetObjectItemCaseSensitive(new_obj, "name"); printf("name: %s\n", name->valuestring); const cJSON *address_obj = cJSON_GetObjectItemCaseSensitive(new_obj, "address"); const cJSON *street = cJSON_GetObjectItemCaseSensitive(address_obj, "street"); printf("street: %s\n", street->valuestring); const cJSON *city = cJSON_GetObjectItemCaseSensitive(address_obj, "city"); printf("city: %s\n", city->valuestring); // 釋放內存 cJSON_Delete(root); cJSON_Delete(new_obj); free(json_str); return 0; }
在上面的代碼中,我們首先創建了一個 JSON 對象,并使用cJSON_AddXXXToObject()
方法往對象中添加屬性。然后,我們將 JSON 對象轉化為字符串,并使用cJSON_Parse()
方法從字符串中解析出一個新的 JSON 對象。這個新的對象可以使用cJSON_GetObjectItemCaseSensitive()
方法來獲取其中的屬性。
需要注意的是,在使用 cJSON 庫時需要手動釋放內存。我們使用cJSON_Delete()
方法來釋放 JSON 對象的內存,使用free()
方法來釋放 JSON 字符串的內存。