cJSON创建对象示例

目标:创建如下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里面就包含两样东西,{} 和 [],
{} 里面存放键值对;
[] 里面存放值。

你可能感兴趣的:(C)