cjson linux 读写文件
时间: 2023-12-28 19:03:32 浏览: 28
cjson库是一个用于解析和生成JSON数据的C语言库。它提供了一组函数来读取和写入JSON文件。下面是一个演示如何使用cjson库在Linux中读写文件的例子:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "cJSON.h"
void write_json_file(const char* filename) {
// 创建一个JSON对象
cJSON* root = cJSON_CreateObject();
cJSON_AddStringToObject(root, "name", "John");
cJSON_AddNumberToObject(root, "age", 30);
// 将JSON对象转换为字符串
char* json_str = cJSON_Print(root);
// 打开文件并写入JSON字符串
FILE* file = fopen(filename, "w");
if (file != NULL) {
fputs(json_str, file);
fclose(file);
printf("JSON写入文件成功!\n");
} else {
printf("无法打开文件!\n");
}
// 释放内存
cJSON_Delete(root);
free(json_str);
}
void read_json_file(const char* filename) {
// 打开文件并读取JSON字符串
FILE* file = fopen(filename, "r");
if (file != NULL) {
fseek(file, 0, SEEK_END);
long file_size = ftell(file);
fseek(file, 0, SEEK_SET);
char* json_str = (char*)malloc(file_size + 1);
fread(json_str, 1, file_size, file);
json_str[file_size] = '\0';
// 解析JSON字符串为JSON对象
cJSON* root = cJSON_Parse(json_str);
if (root != NULL) {
// 从JSON对象中获取数据
cJSON* name = cJSON_GetObjectItem(root, "name");
cJSON* age = cJSON_GetObjectItem(root, "age");
if (name != NULL && age != NULL) {
printf("姓名:%s\n", name->valuestring);
printf("年龄:%d\n", age->valueint);
} else {
printf("无法获取数据!\n");
}
// 释放内存
cJSON_Delete(root);
} else {
printf("无法解析JSON字符串!\n");
}
fclose(file);
free(json_str);
} else {
printf("无法打开文件!\n");
}
}
void test() {
const char* filename = "data.json";
// 写入JSON文件
write_json_file(filename);
// 读取JSON文件
read_json_file(filename);
}
int main() {
test();
return 0;
}
```
这个例子中,我们首先创建一个JSON对象,然后将其转换为字符串并写入文件。接着,我们再从文件中读取JSON字符串,并将其解析为JSON对象,最后从JSON对象中获取数据并打印出来。