針對JSON格式的數(shù)據(jù),我們經常需要對其中的某些值進行修改,而C語言作為一種底層語言,可以方便地實現(xiàn)對JSON文件中某個值的改寫。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <json-c/json.h> int main() { char* str; char* pos; struct json_object* root; struct json_object* value; enum json_type type; // 讀入JSON文件內容 FILE* file = fopen("data.json", "r"); if(file == NULL) { printf("無法打開JSON文件!\n"); return -1; } fseek(file, 0, SEEK_END); long int file_size = ftell(file); rewind(file); str = (char*)malloc(file_size + 1); fread(str, file_size, 1, file); str[file_size] = '\0'; fclose(file); // 解析JSON數(shù)據(jù)并找到需要修改的節(jié)點 root = json_tokener_parse(str); free(str); json_object_object_get_ex(root, "name", &value); type = json_object_get_type(value); if(type == json_type_string) { // 修改節(jié)點的值 str = strdup(json_object_get_string(value)); pos = strstr(str, "John"); if(pos != NULL) { strncpy(pos, "Tom", 3); json_object_set_string(value, str); } free(str); } // 將修改后的JSON數(shù)據(jù)寫回文件 file = fopen("data.json", "w"); if(file == NULL) { printf("無法打開JSON文件!\n"); return -1; } fprintf(file, "%s", json_object_to_json_string(root)); fclose(file); // 釋放內存 json_object_put(root); return 0; }
以上代碼中,我們首先讀入JSON文件內容,并使用json_tokener_parse函數(shù)解析JSON數(shù)據(jù),然后找到需要修改的節(jié)點,在此示例中為"name"節(jié)點,并獲取其類型。如果該節(jié)點的類型為字符串類型,則首先將原字符串拷貝到新的內存空間中,然后在該字符串中查找需要替換的值,并將其進行替換,最后調用json_object_set_string函數(shù)修改該節(jié)點的值。最后,我們將修改后的JSON數(shù)據(jù)重新寫回文件。