一、JSON、cJSON简介
1. JSON 简介
JSON格式详解
2. cJSON简介
cJSON是一个使用C语言编写的JSON数据解析器,具有超轻便,可移植,单文件的特点,使用MIT开源协议。其中主要包括两个文件cjson.c和cjson.h。
- cjson.h文件中包含了对于JSON格式的结构体定义以及一些操作JSON格式的功能函数,包括创建JSON、向JSON格式中添加数字,字符,布尔值等等、读取JSON格式、将JSON格式转化为字符串等。
- cjson.c文件中就是功能函数的具体实现。
cJSON源码下载地址
下载下来,解压后,从里面找到两个文件(cJSON.c、cJSON.h),复制到我们的工程里面。只需在函数中包含头文件(#include “cJSON.h”),然后和cJSON.c一起编译即可使用。
cJSON数据结构定义
具体代码如下:
typedef struct cJSON {
struct cJSON *next,*prev;
struct cJSON *child;
int type;
char *valuestring;
int valueint;
double valuedouble;
char *string;
} cJSON;
二、使用cJSON构造JSON
1. cJSON库函数介绍
介绍一些构造JSON时,经常用到的函数。
具体代码如下:
CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void); //创建对象---常用
CJSON_PUBLIC(cJSON *) cJSON_CreateNumber(double num); //创建数字
CJSON_PUBLIC(cJSON *) cJSON_CreateString(const char *string); //创建字符串
CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void); //创建数组---常用
CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count); //创建整型数组
CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int count); //创建浮点型数组---这个使用会出问题,需要浮点型可以使用双浮点
CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int count); //创建双浮点型数组
CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char *const *strings, int count); //创建字符型数组
CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const char * const name);//在对象中添加null
CJSON_PUBLIC(cJSON*) cJSON_AddTrueToObject(cJSON * const object, const char * const name);//在对象中添加true
CJSON_PUBLIC(cJSON*) cJSON_AddFalseToObject(cJSON * const object, const char * const name);//在对象中添加false
CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const char * const name, const double number); //在对象中添加数字
CJSON_PUBLIC(cJSON*) cJSON_AddStringToObject(cJSON * const object, const char * const name, const char * const string); //在对象中添加字符串
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item); //在对象中添加项目
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToArray(cJSON *array, cJSON *item); //在数组中添加项目---不常用
CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item); //JSON数据结构转换为JSON字符串---有格式
CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item); //JSON数据结构转换为JSON字符串---无格式
CJSON_PUBLIC(void) cJSON_Delete(cJSON *item); //清除结构体
2. 使用cJSON构造构造JSON
具体示例代码如下:
#include <stdio.h>
#include "cJSON.h"
int main(void)
{
double grade[4]={ 66.5,118.5,61.5,128.5};
char *json_data = NULL ;
cJSON *TCP = cJSON_CreateObject(); //创建一个对象
cJSON_AddStringToObject(TCP,"name","MQ"); //添加字符串
cJSON_AddNumberToObject(TCP,"age",25); //添加整型数字
cJSON_AddNumberToObject(TCP,"weight",66.66); // 添加浮点型数字
cJSON *ADD = cJSON_CreateObject();
cJSON_AddStringToObject(ADD,"country","China"); //添加字符串
cJSON_AddNumberToObject(ADD,"zip-code",123456); //添加整型数字
cJSON_AddItemToObject(TCP,"address",ADD);
cJSON *SUB = cJSON_CreateArray();
cJSON_AddStringToObject(SUB,"","政治");
cJSON_AddStringToObject(SUB,"","数学");
cJSON_AddStringToObject(SUB,"","英语");
cJSON_AddStringToObject(SUB,"","专业课");
cJSON_AddItemToObject(TCP,"subject",SUB);
cJSON *GRA = cJSON_CreateDoubleArray(grade,4);
cJSON_AddItemToObject(TCP,"grade",GRA);
cJSON *STU = cJSON_CreateArray();
cJSON *Z3 = cJSON_CreateObject();
cJSON_AddStringToObject(Z3,"name","张三"); //添加字符串
cJSON_AddNumberToObject(Z3,"age",24); //添加整型数字
cJSON_AddTrueToObject(Z3,"gender");
cJSON_AddItemToArray(STU,Z3);
cJSON *L4 = cJSON_CreateObject();
cJSON_AddStringToObject(L4,"name","李四"); //添加字符串
cJSON_AddNumberToObject(L4,"age",25); //添加整型数字
cJSON_AddTrueToObject(L4,"gender");
cJSON_AddItemToArray(STU,L4);
cJSON *W5 = cJSON_CreateObject();
cJSON_AddStringToObject(W5,"name","王五"); //添加字符串
cJSON_AddNumberToObject(W5,"age",26); //添加整型数字
cJSON_AddTrueToObject(W5,"gender");
cJSON_AddItemToArray(STU,W5);
cJSON_AddItemToObject(TCP,"student",STU);
cJSON_AddFalseToObject(TCP,"gender");
json_data = cJSON_Print(TCP); //JSON数据结构转换为JSON字符串
printf("%s\n",json_data);
cJSON_Delete(TCP);
return 0;
}
运行结果如下:
{
"name": "MQ", //字符串
"age": 25, //整数
"weight": 66.66, //浮点数
"address":
{
"country": "China",
"zip-code": 123456
}, //对象
"subject": ["政治", "数学", "英语", "专业课"],//字符型数组
"grade": [66.5, 118.5, 61.5, 128.5], //浮点型数组
"student":[
{ "name":"张三","age":24,"gender":ture},
{ "name":"李四","age":25,"gender":ture},
{ "name":"王五","age":26,"gender":ture},
], //对象型数组
"gender": false //逻辑值
}
三、使用cJSON解析JSON
待更新。。。。。。。。