一 定义(网络)
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,可以把JSON的结构理解成无序的、可嵌套的key-value键值对集合,这些key-value键值对是以结构体或数组的形式来组织的。同一级的key-value键值对之间是用一个“,”(逗号)隔开,每个key-value键值对是由一个key后面紧接一个“:”(冒号),冒号后面是这个key对应的value。Key是一个word,由大小写字母、下划线及数字组成,可以由双引号封闭,也可以不加双引号;而value的取值集为:Number、Boolean(true或false)、null、String、Object及Array。
1、Number:数值,包括整形数与浮点数,如:123、0.83、-2.7e10。
2、String:字符串,是以双引号封闭起来的一串字符,使用反斜杠来转义,如:\\、\n等,如:”abc”。
3、Object:对象,也可理解成一个结构体,是以一对大括号封闭起来的无序的key-value键值对集合,例如:{name:"Susan",age:27,birthday:{year:1984,month:2,day:11}};也可以写成:{"name":"Susan","age":27,"birthday":{"year":1984,"month":2,"day":11}};
4、Array:数组,JSON的数组是一个以中括号封闭起来的value的集合,即数组内的各个成员的数据类型可以不一样,每个value之间是由一个“,”(逗号)隔开,例如:[123,abc,false,{name:mj}];
二 举例
首先需要构思我们需要发送的cjson字串应该包括哪些信息。
想发送cjson字串:
{"Type":"ModelOperation","Bus":"001310220002","Address":"4104","Source":"Web","DevType":"SmartSocketDev","Operation":"SwitchAction","Argument":{"SwitchAction":"Open"}} ---字符串①
解析格式如下:
{ "Type": "ModelOperation","Bus": "001310220002",//总线桥地址 "Address": "4104","Source": "Web","DevType": "SmartSocketDev",//设备类型为智能插座 "Operation": "SwitchAction",//操作动作 "Argument": { "SwitchAction": "Open" //在当前对象中嵌套一个Argument_Json_Object } }
代码:
cJSON *UDP_Json_Object = cJSON_CreateObject(); cJSON *Argument_Json_Object = cJSON_CreateObject(); if((UDP_Json_Object == NULL)||(Argument_Json_Object == NULL)) { return NULL; } cJSON_AddStringToObject(UDP_Json_Object,"Type","ModelAttrsAcquisition"); cJSON_AddStringToObject(UDP_Json_Object,"Bus","001310220002"); cJSON_AddStringToObject(UDP_Json_Object,"Address","4104"); cJSON_AddStringToObject(UDP_Json_Object,"Source","Web"); cJSON_AddStringToObject(UDP_Json_Object,"DevType","SmartSocketDev"); Ctrl_Json_Add(UDP_Json_Object,Argument_Json_Object,"SwitchAction","Open"); char *out = NULL; out = cJSON_PrintUnformatted(UDP_Json_Object);//将json对象转换成一个不带任何格式的字符串,无回车。见字符串① cJSON_Delete(Argument_Json_Object);//使用之后必须释放 cJSON_Delete(UDP_Json_Object); return out;