cJSON 是一个轻量级的、易于使用的 JSON 解析器和构建器,适用于 C 语言。它允许开发者将 JSON 数据解析为 C 数据结构,也可以将 C 数据结构序列化为 JSON 字符串。cJSON 主要用于嵌入式系统和资源受限的环境中,因为它具有较小的内存占用和高效的性能。
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON 基于 JavaScript 的对象和数组语法,但它是独立于语言的文本格式。
cJSON 是一个 C 语言库,提供了以下功能:
cJSON 支持以下几种 JSON 数据类型:
cJSON 广泛应用于以下场景:
以下是一个简单的示例,展示了如何使用 cJSON 解析和生成 JSON 数据:
#include <stdio.h>
#include "cjson/cJSON.h"
int main() {
// 创建一个 JSON 对象
cJSON *root = cJSON_CreateObject();
cJSON_AddStringToObject(root, "name", "Alice");
cJSON_AddNumberToObject(root, "age", 30);
// 添加一个数组
cJSON *hobbies = cJSON_AddArrayToObject(root, "hobbies");
cJSON_AddItemToArray(hobbies, cJSON_CreateString("reading"));
cJSON_AddItemToArray(hobbies, cJSON_CreateString("traveling"));
// 将 JSON 对象转换为字符串
char *json_str = cJSON_Print(root);
printf("JSON: %s\n", json_str);
// 解析 JSON 字符串
cJSON *parsed_root = cJSON_Parse(json_str);
if (parsed_root == NULL) {
const char *error_ptr = cJSON_GetErrorPtr();
if (error_ptr != NULL) {
fprintf(stderr, "Error before: %s\n", error_ptr);
}
} else {
cJSON *name = cJSON_GetObjectItemCaseSensitive(parsed_root, "name");
if (cJSON_IsString(name) && (name->valuestring != NULL)) {
printf("Name: %s\n", name->valuestring);
}
}
// 清理内存
cJSON_Delete(root);
free(json_str);
return 0;
}
常见问题:
解决方法:
cJSON_Delete
释放内存。cJSON_Parse
解析 JSON 字符串时,检查返回值和错误指针,确保输入字符串格式正确。通过以上方法,可以有效避免和解决在使用 cJSON 过程中遇到的常见问题。
领取专属 10元无门槛券
手把手带您无忧上云