在進行C語言開發過程中,我們常常需要使用JSON格式的數據。因此,在寫C語言程序時,保存和讀取JSON數據至文件成為了常見的需求之一。
下面是一份示例代碼,用于將JSON數據保存至文件:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <jansson.h> int main() { /* 創建JSON對象 */ json_t *root = json_object(); json_t *name = json_string("Alex"); json_t *age = json_integer(18); json_t *hobby = json_array(); const char *hobbies[] = {"reading", "swimming", "coding"}; int i; for (i = 0; i < 3; i++) { json_array_append_new(hobby, json_string(hobbies[i])); } json_object_set_new(root, "name", name); json_object_set_new(root, "age", age); json_object_set_new(root, "hobby", hobby); /* 保存JSON對象到文件 */ FILE *fp = fopen("data.json", "w"); json_dumpf(root, fp, JSON_INDENT(4)); fclose(fp); /* 釋放內存 */ json_decref(root); return 0; }
以上代碼首先創建了一個JSON對象,并向其中添加了三個成員:name、age和hobby。然后,使用json_dumpf()函數將JSON對象保存到文件“data.json”中。
接下來是一份示例代碼,用于從文件中讀取JSON數據:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <jansson.h> int main() { /* 從文件中讀取JSON對象 */ FILE *fp = fopen("data.json", "r"); char buffer[1024]; size_t size = fread(buffer, 1, 1024, fp); buffer[size] = '\0'; fclose(fp); json_t *root = json_loads(buffer, 0, NULL); if (!root) { fprintf(stderr, "failed to parse JSON content\n"); return -1; } /* 讀取JSON對象中的成員 */ const char *name = json_string_value(json_object_get(root, "name")); int age = json_integer_value(json_object_get(root, "age")); json_t *hobby = json_object_get(root, "hobby"); int i; printf("name: %s\n", name); printf("age: %d\n", age); printf("hobbies: "); size_t count = json_array_size(hobby); for (i = 0; i < count; i++) { printf("%s ", json_string_value(json_array_get(hobby, i))); } printf("\n"); /* 釋放內存 */ json_decref(root); return 0; }
以上代碼首先使用fread()函數從文件中讀取JSON數據,并使用json_loads()函數將其轉換為JSON對象。接著,依次讀取JSON對象中的成員,并打印輸出。最后,使用json_decref()函數釋放內存。
在實際的開發過程中,我們可以根據需求對以上代碼進行修改,來滿足自己的數據保存和讀取需求。