cjson如何封装一个结构体数组,代码示例
时间: 2024-09-24 20:11:30 浏览: 107
CJSON是一个轻量级的JSON解析库,用于C语言。要封装一个结构体数组以便序列化到JSON,你需要首先定义一个结构体,然后创建一个动态数组来存储这些结构体实例。以下是一个简单的代码示例:
```c
#include <cjson/cjson.h>
// 定义一个结构体
typedef struct {
char *name;
int age;
} Person;
// 动态数组来存储Person实例
Person *people = NULL;
size_t people_count = 0;
void add_person(const char *name, int age) {
// 增加空间来添加一个新的Person
if (people_count == 0) {
people = malloc(sizeof(Person));
} else {
people = realloc(people, sizeof(Person) * (people_count + 1));
}
// 初始化新的Person
people[people_count].name = strdup(name);
people[people_count].age = age;
// 增加计数
people_count++;
}
// 将结构体数组转换为JSON字符串
char *serialize_people() {
cJSON *root = cJSON_CreateArray();
for (int i = 0; i < people_count; i++) {
cJSON *item = cJSON_CreateObject();
cJSON_AddStringToObject(item, "name", people[i].name);
cJSON_AddNumberToObject(item, "age", people[i].age);
cJSON_ArrayAddElement(root, item);
}
// 将根节点转换为字符串并返回
char *json_str = cJSON_PrintUnformatted(root);
cJSON_Delete(root); // 删除临时 cJSON 对象
return json_str;
}
```
在这个例子中,`add_person`函数用于添加新的Person实例,而`serialize_people`函数则遍历数组并将每个元素转换为JSON对象,并添加到JSON数组中。记得处理内存分配和释放,特别是当你不再需要这个结构体数组时。
阅读全文