良许Linux教程网 干货合集 一种cJSON与结构体互转的方法

一种cJSON与结构体互转的方法

之前我们介绍过一种cJSON与结构体互转的方法,现在我们发现了另一个开源项目——struct2json,大家可以参考使用。

struct2json

struct2json是一款开源 C 语言结构体与 JSON 快速互转库。它采用简洁的 API 设计,可以快速实现结构体对象与 JSON 对象之间的序列化和反序列化,从而大大降低了实现这类功能所需的代码复杂度。

背景

将面向对象的设计思想应用到 C 语言中,是当前很流行的设计方法。由于 C 语言中没有类,因此一般使用结构体 struct 来充当类,结构体变量则作为对象使用。在使用对象时,我们经常需要考虑对象的序列化和反序列化问题。不同于很多高级语言拥有反射等机制,使得对象的序列化和反序列化非常方便,C 语言则需要借助其他库来实现。

对于 C 语言来说,将对象序列化为 JSON 字符串是一种不错的选择,因此我们可以使用类似 cJSON 之类的 JSON 解析库。然而,使用这些库会导致代码冗余且逻辑性差,因此我们需要对 cJSON 进行二次封装,实现一个快速互转的库,用于将结构体和 JSON 之间进行快速转换。struct2json 就应运而生。下面是 struct2json 的主要应用场景:

  • 持久化:将结构体对象序列化为 JSON 对象后,可将其直接保存至文件、Flash,实现对结构体对象的掉电存储。
  • 通信:许多高级语言(n比如 JavaScript、Groovy)对 JSON 具有原生的支持,因此 JSON 可作为 C 语言与其他语言之间的通信协议和对象传递格式。
  • 可视化:JSON 对象的序列化可以更直观地展示到控制台或者 UI 上,因此可用于产品调试、产品二次开发等场景。

如何使用

声明结构体

如下声明了两个结构体,结构体 Hometown 是结构体 Student 的子结构体

/* 籍贯 */
typedef struct {
    char name[16];
} Hometown;

/* 学生 */
typedef struct {
    uint8_t id;
    uint8_t score[8];
    char name[10];
    double weight;
    Hometown hometown;
} Student;

将结构体对象序列化为 JSON 对象

image-20240103204929008
image-20240103204929008

将 JSON 对象反序列化为结构体对象

image-20240103204946014
image-20240103204946014

欢迎大家 fork and pull request(Github|OSChina|Coding) 。如果觉得这个开源项目很赞,可以点击项目主页 右上角的Star,同时把它推荐给更多有需要的朋友。

文档

具体内容参考\docs\zh\下的文件。务必保证在 阅读文档 后再使用。

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部