[cJSON教程]02:简单使用
创建一个cJSON
cJSON * json = cJSON_CreateObject();//创建
cJSON_Delete(json);//删除
添加值
JSON的数据是以键值对的形式存在的,就这样
{key:value}
不懂的话可以把key想象为变量名,value就是变量的值,使用时用key取出value。
cJSON_Add…ToObject(cJSON变量,charkey,…)
这是通用的格式。
(话说cJSON长得好像map)
CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const char * const name);
CJSON_PUBLIC(cJSON*) cJSON_AddTrueToObject(cJSON * const object, const char * const name);
CJSON_PUBLIC(cJSON*) cJSON_AddFalseToObject(cJSON * const object, const char * const name);
CJSON_PUBLIC(cJSON*) cJSON_AddBoolToObject(cJSON * const object, const char * const name, const cJSON_bool boolean);
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*) cJSON_AddRawToObject(cJSON * const object, const char * const name, const char * const raw);
CJSON_PUBLIC(cJSON*) cJSON_AddObjectToObject(cJSON * const object, const char * const name);
CJSON_PUBLIC(cJSON*) cJSON_AddArrayToObject(cJSON * const object, const char * const name);
这是所有的对Object添加的函数。
举个例子:
cJSON_AddNumberToObject(json,"PI",3.14);
cJSON_AddStringToObject(json,"key","value");
输出
然后就要获取值了。
cJSON_Get…Value(cJSON变量)
或
cJSON_GetObjectItem(cJSON变量,char*key)
CJSON_PUBLIC(char *) cJSON_GetStringValue(const cJSON * const item);
CJSON_PUBLIC(double) cJSON_GetNumberValue(const cJSON * const item);
CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON * const object, const char * const string);
如上。
举个例子:
cout << "PI:" << cJSON_GetNumberValue(cJSON_GetObjectItem(json, "PI") << endl;
cout << "key:" << cJSON_GetStringValue(cJSON_GetObjectItem(json, "key") << endl;
emm…大家可能不明白,我来讲讲。
首先,json里有两个键值对,我们用cJSON_GetObjectItem()取出其中一个,返回一个cJSON,然后cJSON_GetNumberValue()(或cJSON_GetStringValue())将cJSON结构里的值取出来。
也就是说当时他们内部应该是这样:
//表面上的一个
struct json
{
struct cJSON *next = NULL;
struct cJSON *prev = NULL;
struct cJSON *child = A;
int type;
char *valuestring;
int valueint;
double valuedouble;
char *string;
}
//暗地里的两个
struct A
{
struct cJSON *next = B;
struct cJSON *prev = NULL;
struct cJSON *child = NULL;
int type;
char *valuestring;
int valueint;
double valuedouble = 3.14;
char *string = "PI";
}
struct B
{
struct cJSON *next = NULL;
struct cJSON *prev = A;
struct cJSON *child = NULL;
int type;
char *valuestring = "value";
int valueint;
double valuedouble;
char *string = "key";
}
大概是这样