关于cjson的基本认识
一、知识预览
1)cjosn概念引入
2)cjson源码库的获取
3)cjson源码库目录分析
二、cjosn概念引入
CJSON(C JSON)是一个用于处理JSON数据的C语言库,它提供了解析(parsing)和生成(generating)JSON数据的功能。以下是关于CJSON的基本概念和认识:
1. JSON 简介
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于键值对(key-value pairs)的方式来组织数据,支持数组和嵌套结构。
2. CJSON 库
CJSON库是一个用C语言编写的库,用于处理JSON数据。它提供了一组API,可以用来解析(从JSON字符串解析为C结构体)和生成(从C结构体生成JSON字符串)JSON数据。CJSON 实际上使用结构体数组来表示 JSON 的对象和数组。这种结构体数组的设计更为高效和紧凑,适合在 C 语言中处理 JSON 数据。
3. 主要功能
解析(Parsing):将JSON格式的字符串解析为C语言中的数据结构,通常是类似于键值对的结构,如对象(object)和数组(array)。
生成(Generating):将C语言中的数据结构转换为JSON格式的字符串。
访问和修改数据:提供API以访问和修改JSON对象中的数据,包括获取值、设置值、遍历数组等操作。
错误处理:处理JSON格式错误或不合法数据时提供错误检测和报告的机制。
4. 使用场景
数据交换:在网络传输中使用JSON作为数据交换格式,例如Web服务中的客户端与服务器之间的通信。
配置文件:作为配置文件格式,例如各种服务或应用程序的配置文件。
日志:将结构化的日志数据存储为JSON格式,便于后续处理和分析。
数据存储:某些NoSQL数据库支持JSON格式的数据存储,CJSON可以用于与这些数据库进行交互。
三、cjson源码库的获取
① 获取方法
Gitee官网:https://gitee.com
官方存储库获取
GitHub 或者Gitee上的 CJSON:
通常可以在 GitHub 上找到 CJSON 的开源项目。搜索关键词 "CJSON GitHub" 或者直接访问 GitHub 平台搜索 CJSON 相关的项目。
② GitHub或者Gitee获取
1)在Gitee官网搜索 cjson
2)搜索之后可看到c json源码项目下载
3) 可下载当前master当前版本cjson项目源码
4)点击克隆下载之后
5)直接使用gitee的链接在Linux终端直接输入下载cjson源码到Linux的当前路径
下载命令:git clone https://gitee.com/linux_open_source/cjson.git
四、cjson源码库目录分析
① 源码项目分析
cJSON项目是一个轻量级的、单一文件的C语言库,用于解析和生成JSON格式数据。尽管它主要是一个单一文件(cJSON.c)和一个头文件(cJSON.h)的集合,但通常可能还包括一些测试文件(如test.c)和文档。不过,核心功能主要集中在cJSON.c和cJSON.h中。
② 核心文件分析
1)cJSON.h
功能概述:
cJSON.h是cJSON库的头文件,它包含了cJSON库所需的所有类型定义、结构体定义和函数声明。这个文件是使用cJSON库进行开发时必须包含的文件。
主要内容:
数据类型定义:定义了cJSON支持的数据类型,如cJSON_False、cJSON_True、cJSON_NULL、cJSON_Number、cJSON_String、cJSON_Array、cJSON_Object等。
结构体定义:
定义了cJSON的结构体cJSON,用于表示JSON对象、数组、字符串等。
函数声明:声明了cJSON库提供的所有函数,如cJSON_Parse用于解析JSON字符串,cJSON_Print用于将cJSON对象转换为字符串等。
2) cJSON.c
功能概述:
cJSON.c是cJSON库的实现文件,包含了cJSON库所有函数的实现代码。这个文件是cJSON库的核心,它实现了JSON的解析、生成、修改等功能。
主要内容:
解析函数:如cJSON_Parse,用于将JSON格式的字符串解析为cJSON结构体表示的对象。
生成函数:如cJSON_Print,用于将cJSON结构体表示的对象转换为JSON格式的字符串。
修改函数:提供了一系列函数用于修改cJSON对象,如cJSON_AddItemToObject、cJSON_ReplaceItemInObject等。
辅助函数:
包括内存管理、错误处理等辅助函数。
③ cjson源码库开发中如何使用?
cJSON库通过cJSON结构体和一系列函数实现了对JSON数据的解析和生成。
具体来说,它使用cJSON结构体来表示JSON对象、数组、字符串等,并主要通过cjson.c函数来创建、修改、删除这些结构体,以及将它们转换为字符串或从字符串中解析出来。
cJSON源码目录的分析主要围绕其核心文件cJSON.h和cJSON.c进行。这两个文件分别包含了cJSON库的类型定义、结构体定义、函数声明和函数实现,是实现cJSON库功能的关键。通过这两个文件,我们可以深入了解cJSON库的工作原理和使用方法。
cjson/src/cJSON中的cjson.h和cjson..c
④ 分析cjson源码库存放数据的数据结构
1)概念引入
分析的接口在cjson.c中,接口功能就是创建、修改、删除,输出,添加数据(cjson格式的数据)的结构体
2)CJSON的数据构造
其实存放数据的结构是一个类似链表的结构体:
/* The cJSON structure: */
typedef struct cJSON
{
struct cJSON *next;//next指针:指向下一个键值对
struct cJSON *prev;//prev指针:指向上一个键值对
struct cJSON *child;//在键值对结构体中,当该键值对的值是一个嵌套的JSON数据或者一个数组时,由child指针指向该条新链表。
int type;//键值对 中 值的数据类型 cJSON Types
char *valuestring;//如果 键值对中的值,是字符串类型,该变量就是字符串的地址
int valueint;//如果 键值对中的值,是int类型,该变量就是值的数据
double valuedouble;//如果 键值对中的值,是double类型,该变量就是值的数据
char *string;//存放 键值对 中 的 键(键都是字符串类型) 键起到数据的描述
} cJSON
⑤ CJSON的接口
1)创建cjson对象
示例:
cJSON * csjon_obj = cJSON_CreateObject(); //创建一个全新,空数据的json对象
2)添加键值对函数
3)关于添加数组键值对
分析cJSON_AddxxxToObject添加”键值对“对cjson对象的构造设计理念
4)关于添加字符串键值对
5)删除键值对
6) 释放内存
五、cjson数据的解析与提取接口
① 解析与提取原理
解析JSON数据的过程,其实就是筛选一个一个键值对的过程。
② 解析cjson数据的系列接口
解析整段JSON数据,并将链表头结点地址返回,赋值给头指针,解析整段数据使用的API只有一个:
(cJSON *) cJSON_Parse(const char *value);
③ 提取json数据中的数据值接口 -- 字符串母串中提取字串
根据键值对的名称从链表中取出对应的值,返回该键值对(链表节点)的地址
(cJSON *) cJSON_GetObjectItem(const cJSON * const object, const char * const string);
如果JSON数据的值是数组,使用下面的两个API提取数据:
(int) cJSON_GetArraySize(const cJSON *array);
(cJSON *) cJSON_GetArrayItem(const cJSON *array, int index);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)