目标:创建如下json对象
{
"application": "mcucontroller_v1",
"port": "4",
"destination": "cciot_cloud",
"payload": {
"method": 105,
"para": {
"code": 104,
"id": ["0505000000000000dddd"],
"control": 1
}
}
}
对这个json对象进行分析:
“mcucontroller_v1”
“4”
“cciot_cloud”
105
104
“0505000000000000dddd”
1
以上这些都是一个个item
能产生item的必定是下列函数
cJSON_CreateNull(void);
cJSON_CreateTrue(void);
cJSON_CreateFalse(void);
cJSON_CreateBool(cJSON_bool boolean);
cJSON_CreateNumber(double num);
cJSON_CreateString(const char *string);
[]
这是空数组
能产生空数组的必定是下面这个函数
cJSON_CreateArray(void);
向[]中添加item必定是下面这个函数。
cJSON_AddItemToArray(cJSON *array, cJSON *item);
{}
这是空对象 (ps:对象也是一个item,能作为键值对中值的,都可以作为item)
能产生空对象的必定是下面这个函数
cJSON_CreateObject(void);
向{}添加item必定是下面这个函数。并且向{}中添加item的时候还可以添加key,也必须添加key,也只有这一种方式可以添加key
cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);
:
带冒号的必定是通过下面这个函数得到的,也就是上面讲的向{}中添加item
cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);
实现源码:
#include
#include
#include
#include "cJSON.h"
//首先明确一下
// {a: 'Hello', b: 'World'} 这是一个对象,注意键名也是可以使用引号包裹的
// "{"a": "Hello", "b": "World"}" 这是一个 JSON 字符串,本质是一个字符串
// cJSON_Print() 对象转字符串
// cJSON_Parse() 字符串转对象
// 转成字符串的目的是为了 打印 和 传输
// 转成对象 的目的是为了 解析
/*
{
"application":"mcucontroller_v1",
"port":"4",
"destination":"cciot_cloud",
"payload":{
"method":105,
"para":{
"code" :104,
"id" : [
"0505000000000000dddd",
],
"control" :1
}
}
}
*/
/* 生成一个json对象 */
void create_json_object(void)
{
cJSON *root = NULL;
cJSON *application = NULL;
cJSON *payload = NULL;
cJSON *para = NULL;
cJSON *array = NULL;
root = cJSON_CreateObject(); // 1.生成一个空对象,即最外层花括号
application = cJSON_CreateString("mcucontroller_v1"); // 2.生成一个item : "mcucontroller_v1"
cJSON_AddItemToObject(root, "application", application); // 3.将上面的item添加到空对象root,换句话说:将"mcucontroller_v1"添加到最外层花括号,并且令key = "application",cJSON中key只能以这种方式登场,并且key的类型只能是字符串,原因也是因为这个cJSON_AddItemToObjec()函数的限制
/* 4.也可以一步到位 */
cJSON_AddItemToObject(root, "port", cJSON_CreateString("4"));
cJSON_AddItemToObject(root, "destination", cJSON_CreateString("cciot_cloud"));
payload = cJSON_CreateObject(); // 5.生成一个空对象,即第二层花括号
cJSON_AddItemToObject(root, "payload", payload); // 6.将第二层空花括号添加到第一层花括号中
cJSON_AddItemToObject(payload, "method", cJSON_CreateNumber(105)); // 6.同4
para = cJSON_CreateObject(); // 7.生成一个空对象,即第三层花括号
cJSON_AddItemToObject(payload, "para", para); // 8.将第三层空花括号添加到第二层花括号中
cJSON_AddItemToObject(para, "code", cJSON_CreateNumber(104)); // 9.同4
array = cJSON_CreateArray(); // 10.生成一个空数组,即中括号
cJSON_AddItemToObject(para, "id", array); // 11.将中括号添加到第三层花括号中
cJSON_AddItemToArray(array, cJSON_CreateString("0505000000000000dddd")); // 12.向数组中添加item
cJSON_AddItemToObject(para, "control", cJSON_CreateNumber(1)); // 13.同4
/* Print to text */
char *out = cJSON_Print(root);
printf("%s\n", out);
free(out);
cJSON_Delete(root);
}
int main(void)
{
create_json_object();
return 0;
}
总结:
json里面就包含两样东西,{} 和 [],
{} 里面存放键值对;
[] 里面存放值。