cjson 判断字段是否纯在_cJSON API 接口使用说明

cJSON API 接口使用说明

cJSON的介绍

cJSON是一个轻量级的JSON解析器使用ANSIC标准。

所谓的轻量级,如果你的项目需要使用到解析JSON,那么只需要将cJSON的库中的cJSON.h和cJSON.c放入到你的项目中适当的位置就行了。

目前介绍的cJSON的版本为1.5.7。

cJSON库的项目的github地址为:cJSON

在项目的过程中还使用都了shell文件的解析JSON的库,也是轻量级的就是一个JSON.sh文件。

有兴趣的可以看一下这个shell的JSON库, JSON.sh

现在已经有了各种语言的解析的JSON的库,大家可以自行到github上面搜索

为什么介绍cJSON

在项目中需要使用到cJSON的解析JSON库,但是总感觉有点用起来不顺手,所以就自己写些demo来使用这些接口。

主要一些cJSON的接口使用到内存分配的问题,所以特别要注意,而且就在1.5.7刚刚修复了一个内存的问题。

组内还在讨论要不要,把cJSON的问题再升级一下。

自己做了写了一些非常简陋并且丑陋的example代码,link 下面的cjson文件下

cJSON API 使用总结cJSON API

说明

备注

cJSON_Version()

获得cJSON的版本

返回字符串常量

cJSON_InitHooks();

初始化cJSON_Hooks结构体

没太明白

cJSON_Parse();

将字符串解析成cJSON结构体

cJSON_ParseWithOpts()

使用一些配置解析字符串

cJSON_Print()

将cJSON结构体转换成格式化的字符串

cJSON_PrintUnformatted()

将cJSON结构体转换成未格式化的字符串

cJSON_PrintBuffered()

将cJSON结构体使用buffer的字符串,格式化可选

cJSON_PrintPreallocated()

将cJSON结构体使用预分配的内存的字符串,格式化可选

cJSON_Delete()

删除cJSON结构体

删除子对象,所有都会删除

cJSON_GetArraySize()

返回Array类型的大小,对Object类型也是有效的

cJSON_GetArrayItem()

返回Array类型的index的值,对Object类型也有效

cJSON_GetObjectItem()

使用key获得对应的value

cJSON_GetObjectItemCaseSensitive()

使用对大小写敏感的key获得对应的value

cJSON_HasObjectItem()

判断是否ObjectItem存在

cJSON_GetErrorPtr()

获得错误信息

cJSON_IsInvalid()

类型判断

cJSON_IsFalse()

类型判断

cJSON_IsTrue()

类型判断

cJSON_IsBool()

类型判断

cJSON_IsNull()

类型判断

cJSON_IsNumber()

类型判断

cJSON_IsString()

类型判断

cJSON_IsArray()

类型判断

cJSON_IsObject()

类型判断

cJSON_IsRaw()

类型判断

cJSON_CreateNull()

创造对应类型的cJSON

cJSON_CreateTrue()

创造对应类型的cJSON

cJSON_CreateFalse()

创造对应类型的cJSON

cJSON_CreateBool()

创造对应类型的cJSON

cJSON_CreateNumber()

创造对应类型的cJSON

cJSON_CreateString()

创造对应类型的cJSON

cJSON_CreateRaw()

创造对应类型的cJSON

cJSON_CreateArray()

创造对应类型的cJSON

cJSON_CreateObject()

创造对应类型的cJSON

cJSON_CreateIntArray()

批量创造对应类型的cJSON

cJSON_CreateFloatArray()

批量创造对应类型的cJSON

cJSON_CreateDoubleArray()

批量创造对应类型的cJSON

cJSON_CreateStringArray()

批量创造对应类型的cJSON

cJSON_AddItemToArray()

在指定Array后面增加Item

cJSON_AddItemToObject()

在指定Object后面增加Item

cJSON_AddItemToObjectCS()

在指定Object后面增加const Item

cJSON_AddItemReferenceToArray()

在指定Array后面增加Item引用

cJSON_DetachItemViaPointer()

通过指针从Array删除Item的引用

这个自己理解

cJSON_DetachItemFromArray()

从Array删除Item的引用

cJSON_DeleteItemFromArray()

从Array删除Item

cJSON_DetachItemFromObject()

从Object删除Item的引用

cJSON_DetachItemFromObjectCaseSensitive()

大小写敏感的从Object删除Item的引用

cJSON_DeleteItemFromObject()

从Object删除Item

cJSON_DeleteItemFromObjectCaseSensitive()

大小写敏感的从Object删除Item

cJSON_InsertItemInArray()

在Array指定位置插入Item

cJSON_ReplaceItemViaPointer()

使用指针替代Item

cJSON_ReplaceItemInArray()

替换Array的Item

cJSON_ReplaceItemInObject()

替换Object的Item

`cJSON_ReplaceItemInObjectCaseSensitive()

大小写敏感的替换Object的Item

cJSON_Duplicate()

复制cJSON结构体

cJSON_Compare()

比较两个cJSON结构体

cJSON_Minify()

将格式化的字符串压缩

cJSON_AddNullToObject()

调用cJSON_AddItemToObject和cJSON_CreateNull

cJSON_AddTrueToObject()

调用cJSON_AddItemToObject和cJSON_CreateTrue

cJSON_AddFalseToObject()

调用cJSON_AddItemToObject和cJSON_CreateFalse

cJSON_AddBoolToObject()

调用cJSON_AddItemToObject和cJSON_CreateBool

cJSON_AddNumberToObject()

调用cJSON_AddItemToObject和cJSON_CreateNumber

cJSON_AddStringToObject()

调用cJSON_AddItemToObject和cJSON_CreateString

cJSON_AddRawToObject()

调用cJSON_AddItemToObject和cJSON_CreateRaw

cJSON_SetIntValue()

设置int的值,同时也设置double的值

cJSON_SetNumberValue()

后台会调用cJSON_SetNumberHelper

cJSON_SetNumberHelper()

设置cJSON的number类型的值

cJSON_malloc()

cJSON的malloc函数,调用malloc函数

cJSON_free()

cJSON的free函数,调用free函数

cJSON 一些实现原理cJSON有九种类型

Invalid类型

False类型

True类型

Null类型

Number类型

String类型

Array类型

Object类型

Raw类型

主要使用移位来表示的,同时使用&0xFF来判断类型的

还有两个cJSON_IsReference和cJSON_StringIsConst的宏定义,看名字是判断是否是引用和是否是常量字符串

cJSON最主要的结构体 struct cJSON

已经注释的非常清楚了

总体来说,并列层级的第一个是孩子,其他的都是这个孩子的兄弟的结构。

成员变量

说明

next

同一层级相邻的下一个兄弟

prev

同一层级相邻的上一个兄弟

child

本节点的孩子,只有一个孩子

type

本节点的类型

valuestring

将string类型和raw类型的变量转换成字符串

valueint

将int类型的cjson转换成int类型,已经废弃,为了兼容老版本,可以使用cJSON_SetNumberValue替代赋值

valuedouble

同上,可以代替int类型

string

本节点的名字

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22/* 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;

结构体 struct cJSON_Hooks

定义了两个函数指针,一个malloc和free

不知道怎么用

cJSON_bool 本质就是 int类型

还设置了windows环境下编译的一些参数,看不懂。。

然后还是#define设置了不同情况下给每个函数增加不同的环境设置参数,使用CJSON_PUBLIC包裹

限制了嵌套层数,不能超过1000层

object与array的区别

object是一个key和value对应的键值对,例如 { "key1": "value1", "key2": "value2" }

array是一个数据的概念,数据的集合,例如 [ "value1", "value2" ]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值