首页 前端知识 cJSON学习笔记

cJSON学习笔记

2025-03-04 11:03:26 前端知识 前端哥 279 855 我要收藏

学习目的: 如何创建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元素的指针。

转载请注明出处或者链接地址:https://www.qianduange.cn//article/22608.html
标签
评论
发布的文章

图论-腐烂的橘子

2025-03-04 11:03:06

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!