[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";
}

大概是这样