cJSON仅有一个.h和一个.c文件组成,由于是纯C语言实现的,所以跨平台性好;采用的是链表存储;
原型如下:
typedef struct cJSON {
struct cJSON *next,*prev;//下一个节点,上一个节点
struct cJSON *child;所有通过additem添加的都是子节点
int type;根据不同的键值对有不同的type,例如string是4
根据不同的类型来获取值,类似于union,只有选对了类型才能得到正确的值
char *valuestring;
int valueint;
double valuedouble;
char *string;键值对的key
} cJSON;
注:每个additem的节点都是子节点(child),多个子节点之间可以通过next和prev来指向前一个后一个节点;
从而实现遍历的效果
//宏定义,区分不同的type值
#define cJSON_False 0
#define cJSON_True 1
#define cJSON_NULL 2
#define cJSON_Number 3
#define cJSON_String 4
#define cJSON_Array 5
#define cJSON_Object 6
#define cJSON_IsReference 256
cJSON的基本数据类型如上所示:有false,true,null,double,string,array,object;可以理解为该数据是一个大括号{ }中包含的键(key)值(value)对,其中key的值都是字符串类型的;
例:可以利用函数char*date=cJSON_Print(cJSON *item);将结果显示出来
创建方式 | 打印结果 |
cJSON*false_value= cJSON_CreateFalse(); | false |
cJSON*true_value= cJSON_CreateTrue(); | true |
cJSON*null_value= cJSON_CreateNull(); | null |
cJSON*double_value= cJSON_CreateNumber(123); | 123 |
cJSON* string_value= cJSON_CreateString("string"); | string |
cJSON*object= cJSON_CreateObject(); | {} |
cJSON*arr= cJSON_CreateArray(); | [] |
数组:
创建:创建不同类型的数组,
cJSON*arr= cJSON_CreateArray();不指定类型,内部item可以混搭
cJSON *cJSON_CreateIntArray(int *numbers,int count);
cJSON *cJSON_CreateFloatArray(float *numbers,int count);
cJSON *cJSON_CreateDoubleArray(double *numbers,int count);
cJSON *cJSON_CreateStringArray(const char **strings,int count);
增:
void cJSON_AddItemToArray(cJSON *array, cJSON *item);
void cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item);
删:
void cJSON_Delete(cJSON *c);
extern cJSON *cJSON_DetachItemFromArray(cJSON *array,int which);从数组中移除,分离,不删除
extern void cJSON_DeleteItemFromArray(cJSON *array,int which);
改:
void cJSON_ReplaceItemInArray(cJSON *array,int which,cJSON *newitem);
查:
int cJSON_GetArraySize(cJSON *array);返回数组长度
cJSON *cJSON_GetArrayItem(cJSON *array,int item);返回指定下标位置的节点
Object:
创建:
cJSON*object= cJSON_CreateObject();
增:
void cJSON_AddItemToObject(cJSON *object,const char *string,cJSON *item);
void cJSON_AddItemReferenceToObject(cJSON *object,const char *string,cJSON *item);
//宏的方式增加
cJSON_AddStringToObject(json,"name","0123546");
cJSON_AddNumberToObject(json,"age",123);
cJSON_AddNullToObject(json,"dadfs");
cJSON_AddFalseToObject(json,"dadfs");
cJSON_AddTrueToObject(json,"dadfs");
删:
void cJSON_Delete(cJSON *c);//等同于delete变量
从树上移开,
cJSON *cJSON_DetachItemFromObject(cJSON *object,const char *string);
void cJSON_DeleteItemFromObject(cJSON *object,const char *string);
改:
void cJSON_ReplaceItemInObject(cJSON *object,const char *string,cJSON *newitem);
查:
cJSON *cJSON_GetObjectItem(cJSON *object,const char *string);通过key获取节点
转换:
char*转为cJSON格式
cJSON *cJSON_Parse(const char *value);
cJSON格式转char*
char *cJSON_Print(cJSON *item);//带格式的(美观)
char *cJSON_PrintUnformatted(cJSON *item);//不带格式(杂乱,一行到完)
array和object可以互相作为item互为子节点,因此使用时没有固定的格式,需要灵活应用
需要的时候从网上找到这俩文件,下载下来添加自己的项目中就能直接用
一般都是由一个object作为根节点来使用