C语言JSON序列化反序列化-常用接口梳理

了解json

Json入门教程:了解Json基本的概念

json数据类型

● number:数字型,和JavaScript的number完全一致;包括整型和浮点

● boolean:就是JavaScript的true或false;相当于c++中的bool类型

● string:就是JavaScript的string;相当于c++的string类型

● null:就是JavaScript的null;相当于C的NULL类型

● array:就是JavaScript的Array表示方式——[];相当于C的数组

● object:就是JavaScript的{ ... }表示方式。相当于C++的类或者C的结构体

注意:json的数据类型在源码实现中和具体的编程语言有关,比如boolean在C中并没有相应的类型,C相关的实现库可能会用0和1表示。

格式规范

● json以大括号起始和结尾

● 内容都是以键值对的形式存在

● 所有的键都是字符串

● 值的类型不一定,属于JavaScript 的基本数据类型

● 每个键值对以,分割

● 最后一个键值对不加逗号

{ "name": "小明", "age": 14, "gender": true, "height": 1.65, "grade": null, "skills": [ "JavaScript", "Java", "Python", "Lisp" ] }

json格式校验

在线JSON校验格式化工具(Be JSON)

JSON基本操作

Json序列化:可以理解为利用程序生成Json字符串的过程。

Json反序列化:可以理解为利用程序将已有的Json字符串解析出我们需要的值的过程。

cJson

官方地址

cJSON的github地址(这个不用看,相当于官方源码地址)

https://github.com/DaveGamble/cJSON

📎cJSON.h📎cJSON.c

参考资料

cJSON 使用详解

cJSON 使用详解-CSDN博客

JSON的简单介绍以及C语言的JSON库使用

https://www.cnblogs.com/liunianshiwei/p/6087596.html

关键接口梳理

/* 类型定义 */
#define cJSON_False 0
#define cJSON_True 1
#define cJSON_NULL 2
#define cJSON_Number 3
#define cJSON_String 4
#define cJSON_Array 5
#define cJSON_Object 6

/* CJSON核心结构体 */
typedef struct cJSON
{
	struct cJSON *next,*prev;	/* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */
	struct cJSON *child;		/* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */
	int type;	/* 节点的类型,取值是上面的6种 */
	char *valuestring;/* 如果类型是cJSON_String,那么值会被存到这里 */
	int valueint;/* 如果类型是cJSON_Number,且是整型那么值会被存到这里 */
	double valuedouble;	/* 如果类型是cJSON_Number,且是浮点型,那么值会被存到这里 */
	char *string;/*键*/
} cJSON;

/****************************通用接口****************************/
//把传入的字符串转成cJSON的结构(反序列化)
cJSON *cJSON_Parse(const char *value);
//把cJSON结构转成字符串(序列化),调用后需要配合free接口释放malloc的内存
char  *cJSON_Print(cJSON *item);
//无格式化序列化,节省内存,调用后需要配合free接口释放malloc的内存
char  *cJSON_PrintUnformatted(cJSON *item);
//释放节点的内存,防止内存泄露
void   cJSON_Delete(cJSON *c);

/****************************反序列化相关接口****************************/
//获取数组的大小
int	  cJSON_GetArraySize(cJSON *array);
//从array数组中获取第item个子节点
cJSON *cJSON_GetArrayItem(cJSON *array, int index);
//获取object大节点名字叫string的子节点
cJSON *cJSON_GetObjectItem(cJSON *object,const char *string);
//判断object大节点中是否有名字叫string的小节点
int cJSON_HasObjectItem(cJSON *object,const char *string);

/****************************序列化相关接口****************************/
//创建一个普通节点
cJSON *cJSON_CreateObject(void);
//创建一个数组节点
cJSON *cJSON_CreateArray(void);
//把item节点增加到array的数组节点中
void cJSON_AddItemToArray(cJSON *array, cJSON *item);
//把item节点增加到object中作为子节点,item节点的键名为string
void cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);

//替换某个节点
void cJSON_ReplaceItemInObject(cJSON *object,const char *string,cJSON *newitem);
//删除某个节点
void cJSON_DeleteItemFromObject(cJSON *object,const char *string);

//创建各种类型的cJSON节点
cJSON *cJSON_CreateNull(void);
cJSON *cJSON_CreateTrue(void);
cJSON *cJSON_CreateFalse(void);
cJSON *cJSON_CreateBool(int b);
cJSON *cJSON_CreateNumber(double num);  //这个接口只需要传入整形形参,double会自动强转
cJSON *cJSON_CreateString(const char *string);
cJSON *cJSON_CreateArray(void);
cJSON *cJSON_CreateObject(void);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

满山的猴子我的腚最红

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值