c语言读取一个json文件 将其中的键值对输出为结构体
时间: 2024-03-22 10:37:06 浏览: 186
好的,我可以为您提供一些帮助。您可以使用C语言中的第三方库 cJSON 来解析 JSON 文件,并将解析结果保存在结构体中。
首先,您需要在项目中添加 cJSON 库,并在代码中包含头文件:
```c
#include "cJSON.h"
```
然后,您可以使用 cJSON 库中的函数来解析 JSON 文件。下面是一个示例代码,假设 JSON 文件中包含一个名为 "person" 的对象,其中包含 "name" 和 "age" 两个属性:
```c
// 读取 JSON 文件内容
FILE* fp = fopen("example.json", "rb");
fseek(fp, 0, SEEK_END);
long file_size = ftell(fp);
rewind(fp);
char* buffer = (char*)malloc(sizeof(char) * (file_size + 1));
fread(buffer, sizeof(char), file_size, fp);
fclose(fp);
// 解析 JSON 文件内容
cJSON* root = cJSON_Parse(buffer);
if (root == NULL) {
printf("Error before: [%s]\n", cJSON_GetErrorPtr());
} else {
// 从 JSON 对象中获取属性值
cJSON* person = cJSON_GetObjectItem(root, "person");
const char* name = cJSON_GetObjectItem(person, "name")->valuestring;
int age = cJSON_GetObjectItem(person, "age")->valueint;
// 将属性值保存到结构体中
struct Person {
char name[100];
int age;
} p;
strcpy(p.name, name);
p.age = age;
// 输出结构体内容
printf("Name: %s\n", p.name);
printf("Age: %d\n", p.age);
// 释放 cJSON 对象和缓冲区
cJSON_Delete(root);
free(buffer);
}
```
这个示例代码中,我们首先使用 fopen() 函数打开 JSON 文件,然后使用 fseek() 和 ftell() 函数获取文件大小,再使用 fread() 函数读取文件内容到缓冲区中。接下来,我们使用 cJSON_Parse() 函数将缓冲区中的 JSON 字符串解析为 cJSON 对象。然后,我们使用 cJSON_GetObjectItem() 函数从 cJSON 对象中获取 "person" 属性,再使用 cJSON_GetObjectItem() 函数从 "person" 属性中获取 "name" 和 "age" 属性的值。最后,我们将这些值保存到结构体中,并输出结构体内容。
需要注意的是,这个示例代码中没有对 cJSON 库的错误情况进行处理,请根据您的实际需求进行修改。
阅读全文