零基础学习cJSON 源码详解与应用(一)如何学习cJSON

cJSON系列:

一,什么是json

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。
在程序之间进行数据交换过程中,特别是在互联网的轻量数据通信中json格式数据广泛应用。
以下是一个简单的json数据的例子:

{
    
    
    "years": 22,
    "name": "fool",
    "man": true,
    "adult": false,
    "season": ["spring", "summer", "fall","winter"],
    "money": null,
    "child": {
    
    
        "girlfriend": "june",
        "boyfriend" : null
    }
}

上述例子表明json是以“键-值”对的形式保存数据,每一个键值对可以称为一个item,一个json类型的数据可以有多个item,item数据类型包括:整型,字符串,布尔值,null,数组,以及json。

冒号左边的字符串是键,右边则是值。键必须是字符串,而值可有多种数据类型。在读取,写入,修改,删除数据时,都是根据键来对值进行操作。

二,应用场景示例

当需要从互联网获取天气数据时,可向查询天气接口发起请求,注意它的返回数据格式就是json
在这里插入图片描述
点击进入API测试工具,点击模拟调用接口,右侧的窗口就会返回以json格式的天气数据。
在这里插入图片描述

三,学习cjson的关键

cjson就是用来处理json格式数据的一个库。cjson是使用c语言编写的,它十分轻量级,可用在内存有限的嵌入式设备中,来处理与互联网的交互数据。

cjson的github地址:https://github.com/DaveGamble/cJSON;cjson的代码主要在cJSON.ccJSON_Utils.c这两个文件中,其中最主要功能的是由cJSON.c实现。

它实现了对json数据的基本操作,如:生成json数据,解析json数据,对json的增删改读等。

因为json的所有操作都是以cjson结构体为对象的,所以学习cjson的关键在于掌握cjson结构体与json格式数据的对应关系,理解了这一点,对于源码的逻辑就会有更加清晰的认识。

cjson结构体的定义以及类型如下:

/* cJSON Types: */
#define cJSON_Invalid (0)   //非法类型
#define cJSON_False  (1 << 0) 
#define cJSON_True   (1 << 1)
#define cJSON_NULL   (1 << 2)
#define cJSON_Number (1 << 3)
#define cJSON_String (1 << 4)
#define cJSON_Array  (1 << 5) //数组类型
#define cJSON_Object (1 << 6) //json类型
#define cJSON_Raw    (1 << 7) /* raw json */

#define cJSON_IsReference 256 //cjson是否参考外部另一个cjson
#define cJSON_StringIsConst 512 //字符串是否是常量

/* The cJSON structure: */
typedef struct cJSON
{
    
    
    struct cJSON *next;		//链表中的下一个cjson
    struct cJSON *prev;		//链表中的上一个cjson
    struct cJSON *child;  //指向下一层的cjson(object或数组)

    int type;   //json类型

    char *valuestring;  //存放字符串
    int valueint;   //存放整型值
    /* The item's number, if type==cJSON_Number */
    double valuedouble; //存放双精度数据

    char *string;   //键key
} cJSON;

cjson与json的具体对应关系如下:一个cjson结构体可以看作一个item,也就是一个"键-值"对(eg:“years”: 22),当item的类型为object时,表示这个item是一个json数据,这个json数据下可以有若干个item,以此实现嵌套。请认真理解下图的关系。
在这里插入图片描述

小结

随着物联网的越来越热闹,嵌入式设备中应对数据交换的情况也越复杂,具备对json数据的处理能力是一个嵌入式物联网设备的必须能力要求。

在下一篇我将介绍如何简单的使用cjson创建json数据。

linux下安装cjson
参考博客:https://blog.csdn.net/woay2008/article/details/94367652
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44821644/article/details/110395913