行业资讯
您现在所在的位置:首页>企业动态>行业资讯

cJSON库的简单使用

编辑:学到牛牛IT培训    发布日期: 2023-08-15 09:31:35  


在使用cJSON库之前,我们的先了解JSON是什么?JSON(JavaScript Object Notation,JavaScript对象表示法)是一种由道格拉斯·克罗克福特构想和设计、轻量级的数据交换语言,该语言以易于让人阅读的文字为基础,用来传输由属性值或者序列性的值组成的数据对象。尽管JSON是JavaScript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。cJSON是C语言中一个JSON一个编解码器。cJSON的优点是非常轻量级,源码的可读性也十分强,十分利于开发者学习。

JSON的三种语法:

键值对:key:value。比如:“subject”:“artificial intelligence”,如果写在花括号中可以包含多个键值对。比如:{“class”: ”1”“name”:“xaiomin”,“age”:“20”}当然一个key里面可以包含多个值,比如{“obj”:[“class”,“name”,“age”]},在value里面的值写在[]里面。

JSON的两种结构:

对象:对象在JSON中表示为“{}”括起来的内容,数据结构为{key:values}的键值对的结构.

数组:数组在JSON中是中括号“[]”括起来的内容,数据结构为["class","name","age",...]

前面我们说到cJSON是JSON的一个解码器。那么我们怎么在自己的项目中使用cJSON库呢?

介绍

cJSONC语言中最常用的JSON库,GitHub的地址是 https://github.com/DaveGamble/cJSON

生成cJSON常用函数:

1、cJSON  cJSON_CreateObject(void);

功能:创建根对象

参数:无

返回值:生成一个cJSON对象指针


2、cJSON  cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);

功能:往根指针里面添加cJSON对象

参数:object:新获取的根对象

      string:key

      item: value

返回值:key的对象指针


3、cJSON_AddStringToObject(object,name,s);

功能:给key对象赋值

参数:*objec:需赋值的key对象

      name:key

      s:value

返回值:无


4、cJSON *cJSON_Print(const cJSON *item);

功能:将json对象转换成普通的字符串

参数:item:创建的根对象根指针

返回值:普通字符串指针


5、cJSON_Delete(cJSON *c)

功能:用来释放所占内存

参数:c:获取的句柄

返回值:无

解析cJSON常用函数:

1、cJSON *cJSON_Parse(const char *value);

功能:解析JSON数据包,并按照cJSON结构体的结构序列化整个数据包。

参数:value:需解析的字符串

返回值:获取一个句柄


2、cJSON *cJSON_GetObjectItem(const cJSON *object, const char *string);

功能:获取json指定的对象成员

参数:*objec:第一个函数中获取的句柄。

      string:需要获取的对象

返回值:这个对象成员的句柄  如果json格式的对象成员直接就是字符串那么就可以直接通过结构体中的valuestring元素来获取这个成员的值


3、cJSON *cJSON_GetArrayItem(const cJSON *array, int item);

功能:有可能第二个函数中获取到的是成员对象值是一个数组,那么就需要用到这个函数。用来获取这个数组指定的下标对象

参数:*array:传入第二步中返回的值

    item:想要获取这个数组的下标元素

返回值:这个数组中指定下标的对象。然后在对这个返回值重复使用第二步函数就可以获取到各个成员的值了。

也就是说对象是数组的比是字符串的要多用一个cJSON_GetArrayItem函数,其他的没区别。


4、cJSON_Delete(cJSON *c)

功能:用来释放所占内存

参数:c:获取的句柄

返回值:无

安装

作者使用的环境是Ubuntu20.04.

第一步:安装cmake

sudo apt-get install cmake

图片1.png

需要加sudo这个命令,不然可能会出现权限不够的提示

如果遇到无法获得锁如图

2.png

解决方案,强制删除

sudo rm /var/lib/dpkg/lock-frontend

sudo rm /var/lib/dpkg/lock

cmake安装成功

3.png

第二步,安装cJSON库

git clone https://github.com/DaveGamble/cJSON.git

cd cJSON

make

第三步,使用cJSON库

测试源码如下:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <cjson/cJSON.h>


int main()

{

    cJSON *json = NULL;

    cJSON *array = NULL;

    cJSON *obj = NULL;


    json = cJSON_CreateObject();

    cJSON_AddStringToObject(json, "school", "Sichuan University");


    array=cJSON_CreateArray();

    cJSON_AddItemToObject(json, "artificial intelligence", array);


    obj = cJSON_CreateObject();

    cJSON_AddItemToArray(array, obj);

    cJSON_AddItemToObject(obj, "class", cJSON_CreateString("1"));

    cJSON_AddStringToObject(obj, "name", "xiaomin");

    cJSON_AddStringToObject(obj, "age", "20");

    

    obj = cJSON_CreateObject();

    cJSON_AddItemToArray(array,obj);

    cJSON_AddItemToObject(obj, "class",cJSON_CreateString("1"));

    cJSON_AddStringToObject(obj, "name", "xiaohua");

    cJSON_AddStringToObject(obj, "age", "21");


    obj = cJSON_CreateObject();

    cJSON_AddItemToArray(array, obj);

    cJSON_AddItemToObject(obj, "class", cJSON_CreateString("2"));

    cJSON_AddItemToObject(obj, "name", cJSON_CreateString("xiaoli"));

    cJSON_AddItemToObject(obj, "age", cJSON_CreateNumber(22));


    obj = cJSON_CreateObject();

    cJSON_AddItemToArray(array, obj);

    cJSON_AddStringToObject(obj, "class", "1");

    cJSON_AddItemToObject(obj, "name", cJSON_CreateString("xiaowang"));

    cJSON_AddItemToObject(obj, "age", cJSON_CreateString("19"));


    FILE *fp = fopen("class.json", "w");

    char *buf = cJSON_Print(json);

    fwrite(buf, strlen(buf), 1, fp);

    fclose(fp);


    cJSON_Delete(json);

    return 0;

}

编译、运行

gcc file_name.c -lcjson -lm

./a.out

当前目录会生成一个class.json的文档

查看文档

cat class.json

4.png

免费试学
课程好不好,不如实地听一听

封闭学习

2

1

联系我们

电话:028-61775817

邮箱:1572396657@qq.com

地址:成都市金牛区西城国际A座8楼

  • 新闻频道_关注IT技术应用资讯-学到牛牛
    新闻频道_关注IT技术应用资讯-学到牛牛

    扫一扫,免费咨询

  • 新闻频道_关注IT技术应用资讯-学到牛牛
    新闻频道_关注IT技术应用资讯-学到牛牛

    微信公众号

  • 新闻频道_关注IT技术应用资讯-学到牛牛
新闻频道_关注IT技术应用资讯-学到牛牛

学一流技术,找高薪工作

新闻频道_关注IT技术应用资讯-学到牛牛

7-24小时服务热线:

028-61775817

版权声明 网站地图

蜀ICP备2021001672号

课程问题轻松问