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

使用cJSON库实现JSON与C结构体的互转

使用cJSON库实现JSON与C结构体的互转

简介: 在实际应用中,我们经常需要将JSON格式的数据与C语言中的结构体进行相互转换。cJSON是一个非常便捷的C语言JSON解析库,它可以帮助我们在C语言中轻松地处理JSON数据。本文将介绍如何使用cJSON库来实现JSON数据与C结构体的互转。

步骤1:安装cJSON库

首先,你需要下载并安装cJSON库。你可以在cJSON的GitHub仓库上找到最新的源代码,并按照其中的说明进行编译和安装。

步骤2:将结构体转换为JSON

假设我们有以下C语言结构体表示一个用户:

typedef struct {char name[50];int age;char email[50];
} User;

我们可以使用cJSON库将这个结构体转换为JSON格式的数据:

#include <stdio.h>
#include <string.h>
#include "cJSON.h"char* user_to_json(const User* user) {cJSON* root = cJSON_CreateObject();cJSON_AddStringToObject(root, "name", user->name);cJSON_AddNumberToObject(root, "age", user->age);cJSON_AddStringToObject(root, "email", user->email);char* json_data = cJSON_Print(root);cJSON_Delete(root);return json_data;
}

步骤3:将JSON转换为结构体

同样地,我们可以使用cJSON库将JSON格式的数据转换为C语言的结构体:

User* json_to_user(const char* json_data) {cJSON* root = cJSON_Parse(json_data);User* user = malloc(sizeof(User));strcpy(user->name, cJSON_GetObjectItem(root, "name")->valuestring);user->age = cJSON_GetObjectItem(root, "age")->valueint;strcpy(user->email, cJSON_GetObjectItem(root, "email")->valuestring);cJSON_Delete(root);return user;
}

步骤4:使用示例

int main() {User user = {"John Doe", 30, "john.doe@example.com"};// 将结构体转换为JSONchar* json_data = user_to_json(&user);printf("JSON数据: %s\n", json_data);// 将JSON转换为结构体User* parsed_user = json_to_user(json_data);printf("解析后的用户信息: \n");printf("姓名: %s\n", parsed_user->name);printf("年龄: %d\n", parsed_user->age);printf("邮箱: %s\n", parsed_user->email);// 释放内存free(parsed_user);free(json_data);return 0;
}

以上代码演示了如何使用cJSON库将C语言结构体和JSON数据相互转换。通过这种方法,你可以在C语言中方便地处理JSON格式的数据。

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

相关文章:

  • Cursor :Python 运行路径设置自定义模块导入报错:No module named ‘xxx’ 的解决方案
  • 数图信息科技亮相唐山社区零售论坛,数字化赋能行业高质量发展
  • LLM大模型 - 实战篇 - Assistant API 原理与实战应用
  • python微博舆情分析系统 情感分析 爬虫 机器学习 新浪微博 数据采集 大数据技术(源码)✅
  • FreeRTOS消息队列剖析讲解(思路+源码)
  • Trillium Engineering-无人机万向节有效负载 - 用于战术 UAS 的 EO 和 EO/IR 无人机相机万向节
  • 【Linux网络】Socket编程预备
  • pyAutoGUI 模块主要功能介绍-(4)消息框功能
  • 自学嵌入式第四十三天:硬件方面-ARM体系架构
  • PDF清晰度提升的幕后英雄:ImprovePdf
  • 《中国垒球规则》快投垒球局面规则·垒球5号位
  • Spring Boot 快速入门:构建企业级微服务架构
  • 【论文阅读】 WebDancer: Towards Autonomous Information Seeking Agency
  • MySQL集群运维
  • 未来浏览器:重新定义信息获取与交互
  • Mybatis-plus插件功能
  • weex分析美联储降息新周期:市场迎来机遇与挑战
  • Micronaut 集成 SPL 实现微服务
  • 类加载的过程以及双亲委派模型
  • 将 RabbitMQ 与 .NET Core Web API 和 Worker Services 结合使用
  • 面试编程题(三)
  • SSD性能优化之4K对齐
  • dolphindb vscode更改连接配置的操作步骤
  • 船用配电盘在线绝缘监测故障定位系统
  • 爬虫逆向--Day22Day23--核心实战案例【四川农机购置与补贴信息】【Webpack国密SM3、SM4】
  • 计算机网络————第二章 物理层
  • uniapp usb调试鸿蒙一直连接不上。
  • MySQL独立表空间:优缺点与最佳实践
  • 直播预告 | P4 One正式发布:让创新协作更简单、更安全、更可靠
  • Zookeeper脑裂是什么原因导致的?