当前位置:首页 > C > 正文

轻松掌握C语言中的JSON解析(手把手教你使用cJSON库)

在嵌入式开发、网络通信或配置文件处理中,经常需要在C语言项目中解析或生成JSON数据。然而,C语言本身并不原生支持JSON,因此我们需要借助第三方库。其中,cJSON 是一个轻量、高效且广泛使用的 C语言JSON解析库,非常适合资源受限的环境。

轻松掌握C语言中的JSON解析(手把手教你使用cJSON库) C语言JSON解析库  cJSON使用教程 嵌入式JSON处理 C语言数据解析 第1张

什么是cJSON?

cJSON 是由 Dave Gamble 开发的一个开源 C 库,用于解析和生成 JSON 数据。它代码简洁(仅两个文件:cJSON.c 和 cJSON.h),无外部依赖,非常适合嵌入式系统或小型项目。这也是为什么它成为 嵌入式JSON处理 的首选工具之一。

第一步:获取cJSON库

你可以从 GitHub 官方仓库克隆 cJSON:

git clone https://github.com/DaveGamble/cJSON.git

或者直接下载 cJSON.hcJSON.c 文件,放入你的项目目录中。

第二步:在项目中引入cJSON

cJSON.c 加入编译,然后在你的 C 文件中包含头文件:

#include "cJSON.h"#include <stdio.h>#include <stdlib.h>

第三步:解析JSON字符串(实战示例)

假设你有一个 JSON 字符串如下:

{  "name": "张三",  "age": 28,  "is_student": false,  "hobbies": ["读书", "编程"]}

下面是如何用 cJSON 解析它:

#include "cJSON.h"#include <stdio.h>#include <string.h>int main() {    const char* json_str = "{\"name\":\"张三\",\"age\":28,\"is_student\":false,\"hobbies\":[\"读书\",\"编程\"]}";    // 解析JSON字符串    cJSON *root = cJSON_Parse(json_str);    if (root == NULL) {        const char *error_ptr = cJSON_GetErrorPtr();        if (error_ptr != NULL) {            fprintf(stderr, "解析错误: %s\n", error_ptr);        }        return 1;    }    // 获取 name 字段    cJSON *name = cJSON_GetObjectItemCaseSensitive(root, "name");    if (cJSON_IsString(name) && (name->valuestring != NULL)) {        printf("姓名: %s\n", name->valuestring);    }    // 获取 age 字段    cJSON *age = cJSON_GetObjectItemCaseSensitive(root, "age");    if (cJSON_IsNumber(age)) {        printf("年龄: %d\n", age->valueint);    }    // 获取 hobbies 数组    cJSON *hobbies = cJSON_GetObjectItemCaseSensitive(root, "hobbies");    if (cJSON_IsArray(hobbies)) {        printf("爱好: ");        cJSON *item;        cJSON_ArrayForEach(item, hobbies) {            if (cJSON_IsString(item)) {                printf("%s ", item->valuestring);            }        }        printf("\n");    }    // 释放内存    cJSON_Delete(root);    return 0;}

这段代码展示了如何安全地提取字符串、数字和数组。注意:使用完后必须调用 cJSON_Delete() 释放内存,避免内存泄漏。

第四步:生成JSON数据

cJSON 也可以用来构建 JSON 对象:

cJSON *root = cJSON_CreateObject();cJSON_AddStringToObject(root, "message", "Hello, cJSON!");cJSON_AddNumberToObject(root, "code", 200);char *json_str = cJSON_Print(root);printf("生成的JSON: %s\n", json_str);free(json_str);cJSON_Delete(root);

常见问题与注意事项

  • 确保在解析前检查返回值是否为 NULL。
  • 所有通过 cJSON_Print() 返回的字符串都需手动 free()
  • 不要重复释放同一个 cJSON 对象。
  • 在资源紧张的环境中,可定义宏 CJSON_HIDE_SYMBOLS 减少符号暴露。

总结

通过本教程,你应该已经掌握了如何在 C 语言项目中使用 cJSON 进行 C语言数据解析。无论是解析服务器返回的 JSON,还是生成配置文件,cJSON 都能胜任。它的简洁性和可靠性使其成为 C语言JSON解析库 中的佼佼者。

现在就试试吧!让你的 C 程序也能轻松“读懂”JSON。