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

在 VSCode 中:引入开源cJSon解析库+示例demo

一、下载

在学习VSCode开发c语言时,需要用到cJSon库,因此去学习了解了一下如何导入以及使用。在学习的过程中,也借鉴了别人的经验,故记录下来,方便以后查看。

比较好的文章对cJSon库的库函数详细介绍,链接如下:

https://blog.csdn.net/pjwshuai/article/details/125007434?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-4-125007434-blog-111356443.235^v43^pc_blog_bottom_relevance_base6&spm=1001.2101.3001.4242.3&utm_relevant_index=7

https://blog.csdn.net/qq_23274715/article/details/105800488?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-4-105800488-blog-111251934.235^v43^pc_blog_bottom_relevance_base6&spm=1001.2101.3001.4242.3&utm_relevant_index=7

1.首先下载cJSon库

https://github.com/DaveGamble/cJSON

2.解压之后,找到cJSON.c 和 cJSON.h文件。

二、复制库文件并进行项目配置

1.在项目工程根目录下新建third_party文件夹以及子文件夹cJSON,复制cJSON.c 和 cJSON.h文件到该目录下。

2.在CMakeLists.txt中进行如下路径的配置

三、编写demo

·1.主程序setup_scr_languagescreen_6.c中加入以下代码:

	printf("=== C语言 JSON 处理示例 ===\n\n");// 示例1:创建 JSONprintf("1. 创建 JSON 对象:\n");create_user_json();// 示例2:解析 JSON 字符串printf("\n2. 解析 JSON 字符串:\n");parse_json_string();// 示例3:处理复杂 JSONprintf("\n3. 处理复杂嵌套 JSON:\n");process_nested_json();// 示例4:JSON 数组操作printf("\n4. JSON 数组操作:\n");json_array_example();// 示例5:文件操作printf("\n5. JSON 文件操作:\n");json_file_operations();printf("\n程序执行完毕!\n");

2.在events_init.h文件中函数声明:

#include "../../third_party/cJSON/cJSON.h"// 函数声明
void create_user_json(void);
void parse_json_string(void);
void process_nested_json(void);
void json_array_example(void);
void json_file_operations(void);// 工具函数
cJSON* safe_json_parse(const char *text);
char* safe_json_print(const cJSON *item);

3.在events_init.c文件中函数实现:

#include "../../third_party/cJSON/cJSON.h"// 创建用户 JSON
void create_user_json(void) {cJSON *root = cJSON_CreateObject();// 添加基本字段cJSON_AddStringToObject(root, "name", "张三");cJSON_AddNumberToObject(root, "age", 25);cJSON_AddBoolToObject(root, "is_student", 1);cJSON_AddStringToObject(root, "email", "zhangsan@example.com");// 添加数组cJSON *hobbies = cJSON_CreateArray();cJSON_AddItemToArray(hobbies, cJSON_CreateString("阅读"));cJSON_AddItemToArray(hobbies, cJSON_CreateString("编程"));cJSON_AddItemToArray(hobbies, cJSON_CreateString("音乐"));cJSON_AddItemToObject(root, "hobbies", hobbies);// 添加嵌套对象cJSON *address = cJSON_CreateObject();cJSON_AddStringToObject(address, "city", "北京");cJSON_AddStringToObject(address, "district", "朝阳区");cJSON_AddStringToObject(address, "street", "建国路");cJSON_AddItemToObject(root, "address", address);// 格式化输出char *json_str = cJSON_Print(root);printf("创建的 JSON:\n%s\n", json_str);// 清理内存// free(json_str);cJSON_Delete(root);
}// 解析 JSON 字符串
void parse_json_string(void) {const char *json_string = "{""\"product\": \"笔记本电脑\",""\"brand\": \"ThinkPad\",""\"price\": 6999.99,""\"in_stock\": true,""\"specifications\": [\"16GB RAM\", \"512GB SSD\", \"Intel i7\"]""}";cJSON *root = cJSON_Parse(json_string);if (root == NULL) {const char *error_ptr = cJSON_GetErrorPtr();if (error_ptr != NULL) {fprintf(stderr, "JSON 解析错误: %s\n", error_ptr);}return;}// 提取数据cJSON *product = cJSON_GetObjectItemCaseSensitive(root, "product");cJSON *brand = cJSON_GetObjectItemCaseSensitive(root, "brand");cJSON *price = cJSON_GetObjectItemCaseSensitive(root, "price");cJSON *in_stock = cJSON_GetObjectItemCaseSensitive(root, "in_stock");cJSON *specs = cJSON_GetObjectItemCaseSensitive(root, "specifications");printf("产品信息:\n");if (cJSON_IsString(product)) {printf("  产品: %s\n", product->valuestring);}if (cJSON_IsString(brand)) {printf("  品牌: %s\n", brand->valuestring);}if (cJSON_IsNumber(price)) {printf("  价格: ¥%.2f\n", price->valuedouble);}if (cJSON_IsBool(in_stock)) {printf("  有库存: %s\n", cJSON_IsTrue(in_stock) ? "是" : "否");}if (cJSON_IsArray(specs)) {printf("  规格:\n");cJSON *spec;int index = 1;cJSON_ArrayForEach(spec, specs) {if (cJSON_IsString(spec)) {printf("    %d. %s\n", index++, spec->valuestring);}}}cJSON_Delete(root);
}// 处理复杂嵌套 JSON
void process_nested_json(void) {const char *complex_json = "{""\"company\": {""  \"name\": \"科技有限公司\",""  \"employees\": 150,""  \"departments\": [""    {""      \"name\": \"研发部\",""      \"manager\": \"李四\",""      \"members\": 45""    },""    {""      \"name\": \"销售部\",""      \"manager\": \"王五\",""      \"members\": 30""    }""  ]""}""}";cJSON *root = cJSON_Parse(complex_json);if (root == NULL) {printf("解析复杂 JSON 失败\n");return;}cJSON *company = cJSON_GetObjectItem(root, "company");if (company) {cJSON *name = cJSON_GetObjectItem(company, "name");cJSON *employees = cJSON_GetObjectItem(company, "employees");cJSON *departments = cJSON_GetObjectItem(company, "departments");printf("公司信息:\n");printf("  名称: %s\n", cJSON_IsString(name) ? name->valuestring : "未知");printf("  员工数: %d\n", cJSON_IsNumber(employees) ? employees->valueint : 0);if (cJSON_IsArray(departments)) {printf("  部门:\n");cJSON *dept;cJSON_ArrayForEach(dept, departments) {cJSON *dept_name = cJSON_GetObjectItem(dept, "name");cJSON *manager = cJSON_GetObjectItem(dept, "manager");cJSON *members = cJSON_GetObjectItem(dept, "members");printf("    - %s (经理: %s, 成员: %d人)\n",cJSON_IsString(dept_name) ? dept_name->valuestring : "未知",cJSON_IsString(manager) ? manager->valuestring : "未知",cJSON_IsNumber(members) ? members->valueint : 0);}}}cJSON_Delete(root);//递归释放 cJSON 对象及其所有子对象占用的内存
}// JSON 数组操作示例
void json_array_example(void) {cJSON *root = cJSON_CreateArray();// 添加多个对象到数组for (int i = 0; i < 3; i++) {cJSON *item = cJSON_CreateObject();char name[50];snprintf(name, sizeof(name), "用户%d", i + 1);cJSON_AddStringToObject(item, "name", name);cJSON_AddNumberToObject(item, "id", 1000 + i);cJSON_AddBoolToObject(item, "active", i % 2 == 0);cJSON_AddItemToArray(root, item);}char *json_str = cJSON_Print(root);printf("JSON 数组:\n%s\n", json_str);cJSON_Delete(root);
}// JSON 文件操作
void json_file_operations(void) {// 创建配置 JSONcJSON *config = cJSON_CreateObject();cJSON_AddStringToObject(config, "app_name", "我的应用");cJSON_AddNumberToObject(config, "version", 1.0);cJSON_AddNumberToObject(config, "max_connections", 100);cJSON_AddBoolToObject(config, "debug_mode", 1);cJSON *settings = cJSON_CreateObject();cJSON_AddNumberToObject(settings, "timeout", 30);cJSON_AddStringToObject(settings, "language", "zh-CN");cJSON_AddItemToObject(config, "settings", settings);// 打印 JSONchar *json_str = cJSON_Print(config);printf("配置 JSON:\n%s\n", json_str);// 模拟保存到文件(实际项目中可以写入文件)printf("JSON 已准备好保存到文件...\n");cJSON_Delete(config);
}// 安全的 JSON 解析函数
cJSON* safe_json_parse(const char *text) {if (text == NULL) {fprintf(stderr, "错误: 输入文本为空\n");return NULL;}cJSON *json = cJSON_Parse(text);if (json == NULL) {const char *error_ptr = cJSON_GetErrorPtr();if (error_ptr != NULL) {fprintf(stderr, "JSON 解析错误位置: %s\n", error_ptr);}return NULL;}return json;
}// 安全的 JSON 打印函数
char* safe_json_print(const cJSON *item) {if (item == NULL) {fprintf(stderr, "错误: 不能打印空的 JSON 项\n");return NULL;}char *json_str = cJSON_Print(item);if (json_str == NULL) {fprintf(stderr, "错误: JSON 打印失败\n");}return json_str;
}

四、运行

在终端中输出如下图所示:

http://www.dtcms.com/a/576887.html

相关文章:

  • SwiftUI 组件开发: 自定义下拉刷新和加载更多(iOS 15 兼容)
  • 【面试】分布式事务与分布式锁:核心原理与工程实践
  • 大连制作网站企业优化网站性能
  • 搜索引擎索引权威指南:抓取、收录与排名的基础
  • 电脑关机重启时显示rundll32 内存不能为read解决方法
  • 【P7】docker镜像发布和部署
  • 电脑启动时报 0xc000000e —— 原因解析与多种修复策略
  • 网站建设需求范文包装回收网站建设
  • 使用 Apache Jena 构建 Java 知识图谱
  • ICLR 2025 | 告别“非黑即白”!X-CLR引入“相似度图谱”,让模型读懂万物关联!
  • 【图像处理基石】什么是alpha matting?
  • 面试后查缺补漏--cmake,makefiles,g++,gcc(自写精华版)
  • 使用房屋价格预测的场景,展示如何从多个影响因素计算权重和偏置的梯度
  • 企业网站的首页设计模板天津seo方案
  • 微服务之OpenFeign、hystrix熔断降级、loadbalancer负载均衡
  • 【微服务】(4) 负载均衡
  • 【Qt】Qt实践记录3——UDP通信
  • 考研408--计算机网络--day3--
  • 从云原生部署到智能时序分析:基于 Kubernetes 的 Apache IoTDB 集群实战与 TimechoDB 国产化增强特性深度解析
  • LLaVA-NeXT 学习笔记
  • 投资融资理财网站模板网站搭建福州公司
  • OpenStack创建实例一直处于创建且未分配IP问题解决
  • C++的诗行:一文掌握内存管理中 new/delete 接口正确调用与常见场景适配
  • 谷歌网站 百度做网站对服务器什么要求高
  • Smartproxy 企业级解决方案
  • 图像分类深度学习
  • 自监督骨干(DINOv2)用于内镜分割与跟踪的全面实现分析
  • 6.基础--SQL--DDL表操作-创建查询
  • 《算法闯关指南:优选算法--位运算》--34.判断字符是否唯一,35.丢失的数字
  • 四川建设网网站首页网站开发 周期