关于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

image


2)搜索之后可看到c json源码项目下载

image


3) 可下载当前master当前版本cjson项目源码

image


4)点击克隆下载之后

image


5)直接使用gitee的链接在Linux终端直接输入下载cjson源码到Linux的当前路径

下载命令:git clone https://gitee.com/linux_open_source/cjson.git
image


image


四、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

image


④ 分析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对象

image


示例:

cJSON * csjon_obj = cJSON_CreateObject(); //创建一个全新,空数据的json对象

2)添加键值对函数

image


3)关于添加数组键值对

image
分析cJSON_AddxxxToObject添加”键值对“对cjson对象的构造设计理念
image


4)关于添加字符串键值对

image


5)删除键值对

image


6) 释放内存

image


五、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);

posted @   WJnuHhail  阅读(410)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示