当前位置:网站首页 > 技术博客 > 正文

什么叫json数据的封装



看了cJSON的源码后,惊呼其设计之巧妙,其代码之简洁,其使用之方便!只有两个文件cJSON.h和cJSON.c,非常适合学习C语言中的链表。

JSON[1] 全称 JavaScript Object Notation,即 JS 对象简谱,是一种轻量级的数据格式。

它采用完全独立于编程语言的文本格式来存储和表示数据,语法简洁、层次结构清晰,易于人阅读和编写,同时也易于机器解析和生成,有效的提升了网络传输效率。

JSON 对象是一个无序的"名称/值"键值对的集合:

对于键值,可以有如下值:

示例如下:

cJSON 是一个使用 C 语言编写的 JSON 数据解析器,具有超轻便,可移植,单文件的特点,使用 MIT 开源协议。

cJSON 项目托管在 Github 上,仓库地址如下:

https://github.com/DaveGamble/cJSON

使用 Git 命令将其拉取到本地:

从 Github 拉取 cJSON 源码后,文件非常多,但是其中 cJSON 的源码文件只有两个:

使用的时候,只需要将这两个文件复制到工程目录,然后包含头文件即可,如下:

cJSON 的设计思想从其数据结构上就能反映出来。

cJSON 使用 cJSON 结构体来表示一个 JSON 数据,定义在中,源码如下:

cJSON 的设计很巧妙。

首先,它不是将一整段 JSON 数据抽象出来,而是将其中的一条 JSON 数据抽象出来,也就是一个键值对,用上面的结构体 来表示,其中用来存放值的成员列表如下:

其次,一段完整的 JSON 数据中由很多键值对组成,并且涉及到键值对的查找、删除、添加,所以使用链表来存储整段 JSON 数据,如上面的代码所示:

最后,因为 JSON 数据支持嵌套,所以一个键值对的值会是一个新的 JSON 数据对象(一条新的链表),也有可能是一个数组,方便起见,在 cJSON 中,数组也表示为一个数组对象,用链表存储,所以:

在键值对结构体中,当该键值对的值是一个嵌套的 JSON 数据或者一个数组时,由指针指向该条新链表。

封装 JSON 数据的过程,其实就是创建链表和向链表中添加节点的过程。

首先来讲述一下链表中的一些术语:

明白了这几个概念之后,我们开始讲述创建一段完整的 JSON 数据,即如何创建一条完整的链表。

上面讲述,一段完整的 JSON 数据就是一条长长的链表,那么,如何打印出这段 JSON 数据呢?

cJSON 提供了一个 API,可以将整条链表中存放的 JSON 信息输出到一个字符串中:

使用的时候,只需要接收该函数返回的指针地址即可。

单纯的讲述方法还不够,下面用一个例子来说明,封装出开头给出的那段 JSON 数据:

编译运行:

实验结果如图:

实验结果

该 JSON 数据链表的关系如图:

JSON关系图

参考资料

[1] JSON: https://www.json.org/

版权声明


相关文章:

  • linux ntpdate命令不存在2025-04-10 20:01:02
  • windows无法安装usb驱动2025-04-10 20:01:02
  • linux打印错误码2025-04-10 20:01:02
  • 归并排序算法过程图解2025-04-10 20:01:02
  • sqlalchemy异步查询2025-04-10 20:01:02
  • java并发编程实战和并发编程的艺术2025-04-10 20:01:02
  • 用扩散模型时,转化率为多少2025-04-10 20:01:02
  • python获取某文档的路径2025-04-10 20:01:02
  • sql语句编写技巧2025-04-10 20:01:02
  • 在线编程菜鸟2025-04-10 20:01:02