c 读取cjson文件
时间: 2025-05-19 16:07:48 浏览: 17
### 如何使用cJSON库读取C语言中的JSON文件
要实现通过 `cJSON` 库解析 JSON 文件的功能,可以按照以下方式操作。以下是详细的说明以及代码示例。
#### 使用cJSON库加载并解析JSON文件
`cJSON` 是一种轻量级的 C 语言库,用于处理 JSON 数据结构。它支持序列化和反序列化的功能。为了从文件中读取 JSON 并将其转换为可访问的数据结构,通常需要执行以下几个核心步骤:
1. **打开目标 JSON 文件**
需要用标准 I/O 函数(如 `fopen()` 和 `fgets()` 或者 `fread()`)来读取整个 JSON 文件的内容到内存缓冲区中[^3]。
2. **创建 cJSON 对象**
调用 `cJSON_Parse()` 方法将字符串形式的 JSON 解析成一个 `cJSON*` 类型的对象树[^4]。
3. **遍历或提取数据**
可以利用 `cJSON_GetObjectItemCaseSensitive()` 来获取特定键对应的值,或者递归地探索对象树中的嵌套节点[^5]。
4. **释放资源**
当完成对 JSON 的解析之后,应该调用 `cJSON_Delete()` 删除分配给该对象及其子项的所有动态存储空间[^6]。
下面是完整的代码实例展示上述过程:
```c
#include <stdio.h>
#include <stdlib.h>
#include "cjson/cJSON.h"
void process_json(const char *filename) {
FILE *file = fopen(filename, "r");
if (!file) {
perror("Failed to open file");
return;
}
fseek(file, 0, SEEK_END);
long length = ftell(file);
fseek(file, 0, SEEK_SET);
char *buffer = malloc(length + 1); // Add one extra byte for null terminator.
if (!buffer) {
fclose(file);
fprintf(stderr, "Memory allocation failed\n");
return;
}
size_t result = fread(buffer, 1, length, file);
buffer[result] = '\0'; // Null terminate string.
fclose(file);
cJSON *root = cJSON_Parse(buffer);
free(buffer);
if (!root) {
const char *error_ptr = cJSON_GetErrorPtr();
if (error_ptr != NULL) {
fprintf(stderr, "Error before: %s\n", error_ptr);
} else {
fprintf(stderr, "Unknown parse error.\n");
}
return;
}
cJSON *name_item = cJSON_GetObjectItemCaseSensitive(root, "name");
if(cJSON_IsString(name_item)) {
printf("Name is '%s'.\n", name_item->valuestring);
}
cJSON *age_item = cJSON_GetObjectItemCaseSensitive(root, "age");
if(cJSON_IsNumber(age_item)) {
printf("Age is %d.\n", age_item->valueint);
}
cJSON_Delete(root);
}
int main() {
process_json("example.json"); // Replace this path with your actual json filepath.
return 0;
}
```
此程序展示了如何加载名为 `"example.json"` 的外部 JSON 文件,并打印其中可能存在的两个字段:“name” 和 “age”。
---
###
阅读全文
相关推荐


















