CJSON学习笔记

目录

学习目的:

如何创建JSON对象、解析JSON字符串、访问JSON数据以及释放相关资源。

一、JSON简介

语法结构

1. 对象(Object):用花括号{}表示,包含一组无序的键值对。每个键值对之间用逗号分隔。

2. 数组(Array):用方括号[]表示,包含一组有序的值,每个值之间用逗号分隔。

3. 值(value):可以是字符串、数字、布尔值(表示真假)、对象、数组、null等。

4. 字符串(string):由双引号括起来的Unicode字符序列。

5. 数字(Number):可以是整数或浮点数。

6.布尔值(Boolean):表示真或假。

7. null:表示空值。

二、下载CJSON

​编辑

三、创建一个JSON

函数原型:

cJSON类型详解

next、prev:

child:

type:

valuestring

valueint

valuedouble

string

四、创建键值对

返回值:

cJSON *:

参数:

cJSON * const object:

const char * const name:

const char * const string:

五、添加嵌套的JSON对象

返回值:

cJSON_bool:

参数:

cJSON *object:

const char *string:

cJSON *item:

六、添加数组

创建数组

添加元素到数组

返回值:

cJSON_bool:

参数:

cJSON *array:

cJSON *item:


学习目的:

如何创建JSON对象、解析JSON字符串、访问JSON数据以及释放相关资源。

一、JSON简介

JSON是一种轻量级的数据交换格式,常用于网络之间传输数据。它是一种文本格式,易于人阅读和编写,同时也易于机器解析和生成。

语法结构

1. 对象(Object):用花括号{}表示,包含一组无序的键值对。每个键值对之间用逗号分隔。
{
“key1”:“value1”
“key2”:“value2”
“key3”:“value3”
}
2. 数组(Array):用方括号[]表示,包含一组有序的值,每个值之间用逗号分隔。
{
"arrykey":[1,2,3,4]
}
3. 值(value):可以是字符串、数字、布尔值(表示真假)、对象、数组、null等。
{
"stringkey":"Hello,JSON!",
"numberkey":42,
"booleankey":true,
"nullkey":null
}
4. 字符串(string):由双引号括起来的Unicode字符序列。
{
"name":"John doe",
"city":"New York"
}
5. 数字(Number):可以是整数或浮点数。
{
"integer":42,
"float":3.14
}
6.布尔值(Boolean):表示真或假。
{
"isTrue":true,
"isFalse":false
}
7. null:表示空值。
{
"emptyvalue":null
}

二、下载CJSON

下载网址:GitHub - DaveGamble/cJSON: Ultralightweight JSON parser in ANSI C

三、创建一个JSON

  • 问题:如何用C语言代码去创建一个对象?

函数原型:

CJSON_PUBLIC((CJSON*)CJSON_Createobject(void);
无参数,返回值为CJSON的指针

cJSON类型详解

cJSON结构体如下定义:

/* The cJSON structure: */
typedef struct cJSON
{
    /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */
    struct cJSON *next;
    struct cJSON *prev;
    /* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */
    struct cJSON *child;

    /* The type of the item, as above. */
    int type;

    /* The item's string, if type==cJSON_String  and type == cJSON_Raw */
    char *valuestring;
    /* writing to valueint is DEPRECATED, use cJSON_SetNumberValue instead */
    int valueint;
    /* The item's number, if type==cJSON_Number */
    double valuedouble;

    /* The item's name string, if this item is the child of, or is in the list of subitems of an object. */
    char *string;
} cJSON;
next、prev:

struct cJSON *next;

struct cJSON *prev;

这两个成员用于在数组或对象中遍历链表。可以通过这两个指针在链表中移动,或者使用cJSON库提供的函数GetArraySize、GetArrayItem、GetObjectItem来进行相应的操作。

child:

struct cJSON *child;

如果当前项是一个数组或对象,child指向一个链表,表示数组或对象中的各个元素。通过这个链表,你可以访问数组的各个元素或对象的各个成员。

type:

int type:

表示当前项的类型

cJSON_False

cJSON_True

cJSON_NULL

cJSON_Number

cJSON_String

cJSON_Raw

cJSON_Array

cJSON_Object

valuestring

char *valuestring;//表示值

如果当前项的类型是次cJSON_String或cJSON_Raw,valuestring指向存储字符串值的字符数组。

valueint

int valueint;

DEPRECATED:以前用于存储整数值,现在推荐使用cJSON_SetNumbervalue函数设置数字值。

valuedouble

double valuedouble;

如果当前项的类型是cJSON_Number,valuedouble存储该项的数字值

string

char *string;->表示key

如果当前项是一个对象的成员,string存储该成员的名称(键)。如果当前项是一个数组的元素,string可能为NULL。这些成员组合在一起,使得cJSON结构体能够表示JSON数据的结构和内容,通过递归访问next、prev、child指针,可以遍历整个JSON数据。

四、创建键值对

使用下面这个函数即可创建一个键值对

CJSON_PUBLIC(cJSON*) cJSON_AddStringToObject(cJSON * const object, const char * const name, const char * const string)

这个函数是cJSON库中的一个函数,用于向一个JSON对象(或者JSON字典)中添加一个字符串类型的键值对。

返回值:

cJSON *:

这个函数返回一个指向新添加的JSON元素的指针,这个元素包含了添加的字符串值。如果添加失败,返回NULL。

参数:

cJSON * const object:

这是一个指向JSON对象的指针,表示你要往哪个对象中添加键值对。

const char * const name:

这是一个字符串,表示你要添加的键的名称(key)。

const char * const string:

这是一个字符串,表示你要添加的值。这个值是一个字符串类型的JSON元素。

所以,这个函数的作用就是往一个JSON对象中添加一个键值对,键是name,值是string,然后返回一个指向新添加元素的指针。如果添加失败,返回NULL。

五、添加嵌套的JSON对象

使用下面这个函数为添加嵌套的JSON对象

CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);

返回值:

cJSON_bool:

这是一个表示成功或失败的布尔值,如果成功添加元素,返回true,否则返回false。

参数:
cJSON *object:

这是一个指向JSON对象的指针,表示你要往哪个对象中添加元素。

const char *string:

这是一个字符串,表示你要添加的键的名称。

cJSON *item:

这是一个指向要添加的JSON元素的指针。

六、添加数组

创建数组

CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void);

无参数,返回值为cJSON,这个数组的指针。

添加元素到数组

CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToArray(cJSON *array, cJSON *item);

返回值:

cJSON_bool:

这是一个表示成功或失败的布尔值,如果成功添加元素,返回true,否则返回false。

参数:
cJSON *array:

这是一个指向JSON数组的指针,表示你要往哪个数组中添加元素。

cJSON *item:

这是一个指向要添加的JSON元素的指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

٩(*´◒`*)۶✧

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

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

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

打赏作者

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

抵扣说明:

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

余额充值