cJSON修改json文件某属性值并写回文件 实例
时间: 2023-11-28 10:03:55 浏览: 140
cJSON简单使用例子
可以使用cJSON库来处理JSON文件。以下是一个将JSON文件中某个属性值修改后写回文件的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"
void modify_json_value(const char* filename, const char* key, const char* new_value) {
// 读取JSON文件
FILE* fp = fopen(filename, "rb");
if (!fp) {
printf("Failed to open file: %s\n", filename);
return;
}
fseek(fp, 0, SEEK_END);
long file_size = ftell(fp);
fseek(fp, 0, SEEK_SET);
char* json_str = (char*)malloc(file_size + 1);
fread(json_str, 1, file_size, fp);
fclose(fp);
json_str[file_size] = '\0';
// 解析JSON
cJSON* root = cJSON_Parse(json_str);
if (!root) {
printf("Failed to parse json string: %s\n", json_str);
free(json_str);
return;
}
// 修改属性值
cJSON* node = cJSON_GetObjectItem(root, key);
if (node) {
cJSON_ReplaceItemInObject(root, key, cJSON_CreateString(new_value));
} else {
printf("Failed to find key: %s\n", key);
cJSON_Delete(root);
free(json_str);
return;
}
// 生成新的JSON字符串
char* new_json_str = cJSON_Print(root);
cJSON_Delete(root);
free(json_str);
// 写回文件
fp = fopen(filename, "wb");
if (!fp) {
printf("Failed to open file: %s\n", filename);
free(new_json_str);
return;
}
fwrite(new_json_str, 1, strlen(new_json_str), fp);
fclose(fp);
free(new_json_str);
}
int main() {
modify_json_value("example.json", "name", "new_name");
return 0;
}
```
在这个示例中,我们首先读取JSON文件,并使用cJSON_Parse函数将其解析为一个cJSON对象。然后,我们使用cJSON_GetObjectItem函数查找要修改的属性节点,并使用cJSON_ReplaceItemInObject函数将其替换为一个新的节点。最后,我们使用cJSON_Print函数将修改后的JSON对象转换为字符串,并将其写回原来的文件中。
需要注意的是,由于在修改JSON文件时需要重新生成整个JSON字符串,因此在处理大型JSON文件时可能会导致性能问题。如果需要频繁地修改JSON属性值,建议使用其他格式的数据存储,如数据库。
阅读全文