我是靠谱客的博主 傲娇大船,这篇文章主要介绍Linux_cjson库的简单使用,现在分享给大家,希望可以做个参考。

Linux_cjson的介绍与使用

一、cjson的介绍

JSON(JavaScript Object Notation)是一种轻量级的文本数据交换格式,易于让人阅读。同时也易于机器解析和生成。尽管JSON是Javascript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。(这里介绍下GitHub上DaveGamble的cJSON库的使用)

二、cjson的下载

1、cJSON库下载址:
https://github.com/DaveGamble/cJSON
图来源于网络

2、可以直接通过命令行下载到虚拟机下,也可以先下载到windows再通过rz传进来。

3、按照下面压缩格式解压压缩包 (XXX代表文件名)
.tar -> tar -xvf XXX.tar
.zip -> unzip XXX.zip
.tar.gz -> -zxvf XXX.tar.gz
.tar.bz2 -> -jxvf XXX.tar.bz2
(解压后,文件夹下的内容)
在这里插入图片描述

三、cjson动态库安装与使用

1、make all
在这里插入图片描述
2、sudo make install

四、json函数的封装

1、JSON结构体
熟悉使用cJSON库函数可从cJSON结构体入手,cJSON结构体如下所示:

typedef struct cJSON {  
 struct cJSON *next,*prev;   //双向
 struct cJSON *child;   //下一层
 int type;   //数据项类型(键的类型)
 char *valuestring;   //存储文本型数据
 int valueint;  //存储整型
 double valuedouble;   //存储浮点型
 char *string;   //键名
} cJSON;

2、json函数的封装

//json格式的封装函数例子
int pack_json(char *buf,int size,char *sn,char *time,float temp)
{
        cJSON *root = NULL;

        if(!buf || !sn ||!temp ||!time)
        {
                printf("Invalid input argumentsn");
                return -1;
        }
        
		/*创建头节点,并将头指针指向头节点*/
        root = cJSON_CreateObject();
		
		/*向链表里添加节点*/
        //字符串型
        cJSON_AddStringToObject(root,"sn",chip); 
        //字符串型
        cJSON_AddStringToObject(root,"time",time);
        //浮点型
        cJSON_AddNumberToObject(root,"temperature",temp);

        strncpy(buf,cJSON_Print(root),size);
        cJSON_Delete(root);

        return 0;
}

//json格式的解析函数
int parser_json(char *buf,int snsize,int timesize,char *sn,char *time,float *temp)
{
        cJSON *root;
        cJSON *itme;

        if(!buf || !sn ||!temp ||!time)
        {
                printf("Invalid input arguments");
                return -1;
        }
        
		/*解析整段json数据*/
        root = cJSON_Parse(buf);

		/* 依次根据名称提取JSON数据(键值对) */
        itme = cJSON_GetObjectItem(root,"sn");
        strncpy(sn,itme->valuestring,snsize);

        itme = cJSON_GetObjectItem(root,"time");
        strncpy(time,itme->valuestring,timesize);

        itme = cJSON_GetObjectItem(root,"temperature");
        *temp = itme->valuedouble;
        cJSON_Delete(root);

        return 0;
}

五、cJSON使用过程中的内存问题

cJSON的所有操作都是基于链表的,所以cJSON在使用过程中大量的使用malloc从堆中分配动态内存的,所以在使用完之后,应当及时调用下面的函数,清空cJSON指针所指向的内存,该函数也可用于删除某一条数据:

(void) cJSON_Delete(cJSON *item);

关于更详细的介绍,大家可参考下方链接:
https://mculover666.blog.csdn.net/article/details/103796256

最后

以上就是傲娇大船最近收集整理的关于Linux_cjson库的简单使用的全部内容,更多相关Linux_cjson库内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(96)

评论列表共有 0 条评论

立即
投稿
返回
顶部