C 克隆 JSON 是一種便捷的方法,它可以允許你復制一個 JSON 對象,而不必重新創建一個新的對象。這在某些情況下非常有用,尤其是在程序中需要動態操作 JSON 對象的時候。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "cJSON.h" // 從文件中讀取 JSON 對象,并返回一個 cJSON 指針 cJSON* read_json_file(const char* file_name) { FILE* f = fopen(file_name, "r"); char buffer[1024]; int len = fread(buffer, 1, 1024, f); fclose(f); cJSON* json = cJSON_Parse(buffer); return json; } // 克隆 JSON 對象 cJSON* clone_json(cJSON* json) { // 計算 JSON 對象的長度 int length = cJSON_GetArraySize(json); // 申請一個新的 cJSON 對象,用于存儲新的 JSON 數據 cJSON* new_json = cJSON_CreateArray(); int i; for (i = 0; i < length; i++) { // 獲取原始 JSON 數據的每個元素 cJSON* item = cJSON_GetArrayItem(json, i); // 克隆該元素 cJSON* cloned_item = cJSON_Duplicate(item, 1); // 將克隆后的元素加入新的 JSON 數據 cJSON_AddItemToArray(new_json, cloned_item); } return new_json; } int main() { // 從 JSON 文件中讀取數據 cJSON* json = read_json_file("test.json"); // 克隆 JSON 對象 cJSON* cloned_json = clone_json(json); // 輸出結果到控制臺 printf("Original JSON:\n%s\n\n", cJSON_Print(json)); printf("Cloned JSON:\n%s\n", cJSON_Print(cloned_json)); // 釋放內存 cJSON_Delete(json); cJSON_Delete(cloned_json); return 0; }
在上述代碼中,我們首先通過read_json_file
函數從文件中讀取 JSON 數據。接著,我們通過clone_json
函數克隆該 JSON 對象,并返回新的 cJSON 指針。
該函數主要使用了 cJSON 庫提供的cJSON_Duplicate
函數來克隆 JSON 數據。該函數允許我們復制指針所指向的 JSON 對象,并返回一個新的 cJSON 對象。
克隆后的 JSON 對象包含了與原始對象完全相同的數據,但兩者是獨立的,這樣我們就可以在程序中靈活地操作這些 JSON 對象了。