上述使用cJSON函数库实现
时间: 2025-07-05 14:57:32 浏览: 8
### 使用 cJSON 库实现 JSON 数据解析与操作
在 C 语言中,使用 `cJSON` 函数库可以高效地解析、操作和生成 JSON 数据。该库提供了多个核心函数用于处理 JSON 字符串并构建结构化的数据模型。
#### 解析 JSON 字符串为对象
要将一个 JSON 格式的字符串转换为 cJSON 对象,可以使用 `cJSON_Parse()` 函数。这个函数接收一个以 null 结尾的 JSON 字符串作为输入,并返回一个指向 `cJSON` 类型结构体的指针。如果输入字符串无效,则返回 NULL[^2]。
```c
#include "cJSON.h"
#include <stdio.h>
int main() {
const char *json_str = "{\"name\":\"Alice\",\"age\":25}";
cJSON *root = cJSON_Parse(json_str);
if (root == NULL) {
printf("Failed to parse JSON string.\n");
return -1;
}
// 获取字段值
cJSON *name = cJSON_GetObjectItem(root, "name");
cJSON *age = cJSON_GetObjectItem(root, "age");
if (name && cJSON_IsString(name)) {
printf("Name: %s\n", name->valuestring);
}
if (age && cJSON_IsNumber(age)) {
printf("Age: %d\n", age->valueint);
}
// 释放内存
cJSON_Delete(root);
return 0;
}
```
上述代码演示了如何解析一个简单的 JSON 字符串,并从中提取字段值。通过 `cJSON_GetObjectItem()` 可以获取指定键名对应的 JSON 项,再根据类型判断后访问其值[^3]。
#### 处理 JSON 数组
当需要处理包含多个元素的 JSON 数组时,可以使用 `cJSON_GetArraySize()` 获取数组长度,并遍历每个元素进行操作:
```c
const char *json_array_str = "[{\"name\":\"Alice\"},{\"name\":\"Bob\"}]";
cJSON *array_root = cJSON_Parse(json_array_str);
if (array_root == NULL || !cJSON_IsArray(array_root)) {
printf("Invalid JSON array.\n");
return -1;
}
int array_size = cJSON_GetArraySize(array_root);
for (int i = 0; i < array_size; ++i) {
cJSON *item = cJSON_GetObjectItem(cJSON_GetArrayItem(array_root, i), "name");
if (item && cJSON_IsString(item)) {
printf("Name in array: %s\n", item->valuestring);
}
}
cJSON_Delete(array_root);
```
此段代码展示了如何解析 JSON 数组并逐个读取其中的对象属性。注意每次调用 `cJSON_Parse()` 后都应检查返回值是否为 NULL,确保输入字符串是有效的 JSON 格式[^3]。
#### 构建新的 JSON 数据结构
除了解析现有 JSON 字符串外,还可以使用 `cJSON` 库创建新的 JSON 对象或数组。例如,构造一个包含多个字段的 JSON 对象如下所示:
```c
cJSON *new_obj = cJSON_CreateObject();
cJSON_AddStringToObject(new_obj, "name", "Charlie");
cJSON_AddNumberToObject(new_obj, "age", 30);
char *rendered_json = cJSON_Print(new_obj);
printf("Generated JSON: %s\n", rendered_json);
free(rendered_json); // 注意:cJSON_Print 返回的字符串需手动释放
cJSON_Delete(new_obj);
```
该示例创建了一个新的 JSON 对象,并添加了两个字段("name" 和 "age"),然后将其渲染为字符串输出。
---
###
阅读全文
相关推荐


















