json格式和cjson函数的使用

什么是json?

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成(一般用于提升网络传输速率)。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。
JSON大致3种结构,JSON对象、JSON数组和JSON对象和数组嵌套。

    cJSON的核心结构体就是一个cJSON,理解了这个结构体,基本上对cJSON的使用就有了个基本概念了。该结构体具体定义如下:
typedef struct cJSON {
       struct cJSON*next,*prev;           /* 遍历数组或对象链的前向或后向链表指针*/
       struct cJSON *child;                   /*数组或对象的孩子节点*/
       int type;                                     /* key的类型*/
       char *valuestring;                       /*字符串值*/
       int valueint;                                /* 整数值*/
       double valuedouble;                    /* 浮点数值*/
       char *string;                               /* key的名字*/
} cJSON;

说明:
1、cJSON是使用链表来存储数据的,其访问方式很像一颗树。每一个节点可以有兄弟节点,通过next/prev指针来查找,它类似双向链表;每个节点也可以有孩子节点,通过child指针来访问,进入下一层。只有节点是对象或数组时才可以有孩子节点。

2、type是键(key)的类型,一共有7种取值,分别是:False,Ture,NULL,Number,String,Array,Object。

若是Number类型,则valueint或valuedouble中存储着值。若期望的是int,则访问valueint,若期望的是double,则访问valuedouble,可以得到值。

若是String类型的,则valuestring中存储着值,可以访问valuestring得到值。

3、string中存放的是这个节点的名字,可理解为key的名称。

JSON的格式

键/值对 key:value,用半角冒号分割。 比如 “name”:“Li”
对象 JSON对象写在花括号中,可以包含多个键/值对。比如{ “name”:“Li” ,“address”:“湖北” }。
数组 JSON 数组在方括号中书写: 数组成员可以是对象,值,也可以是数组(只要有意义)。 {“city”: [“武汉”,“广州”,“北京”,“重庆”,“襄阳”]}

JSON对象

JSON对象简单而言便是键值对或名值对,而“值”可以是数值、字符串和布尔类型等
对象在json中表示为“{}”括起来的内容,数据结构为{key:value,key:value,…}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值

1.1 JSON数值
数值不需要加引号,键值对之间使用","。
【单个数值】
{“value”:12}

【多个数值】
{
“maxValue”:24 ,
“minValue”:12
}

1.2 JSON字符串
字符串需要加引号,键值对之间使用","。
【单个字符串】
{“city”:“guangzhou”}

【多个字符串】
{
“city”:“guangzhou” ,
“province”:“guangdong”
}

1.3 JSON布尔
JSON格式中的值可以使用布尔类型,且不需要加引号,如果true或false被引号包裹,那么便解析为JSON字符串。
{“success”:false}

JSON数组

JSON数组的表达方法和C语言数组的表达方法完全相同。数组(在方括号[ ]中)
{“lists”:[5,6,7,8]}

JSON嵌套

JSON格式可以嵌套,所谓嵌套便是JSON对象中可包括JSON数组,JSON数组中可包括JSON对象。
{ “province1”: “广东” ,
“province2”: “湖北” ,
“湖北” : {
“简称” : “鄂”,
“省会” : “武汉” ,
“city” : [“襄阳”,“宜昌”,“恩施”]
}
}

cjson函数的使用

创建一个json对象

cJson * cJson_CreateObject(void);

创建一个json数组

cJSON *cJSON_CreateArray(void)

往json对象中添加数据成员

void cJson_AddltemToObject(
		cJson *object,         //json对象
		cosnt char *string,	//key值
		cJson *item              //value值(int,string,array,obj)
);

往json数组中添加数据成员

void cJSON_AddItemToArray(cJSON *array, cJSON *item); 

向数组对象中添加一个元素,传入参数array为cJSON *结构体类型的指针,为数组对象; item为添加的内容的对象指针。

解析出JSON结构

 cJSON *cJSON_Parse(const char *value);

解析一块JSON数据返回cJSON结构,在使用完之后调用cJSON_Delete函数释 放json对象结构

将传入的JSON结构转化为字符串

char  *cJSON_Print(cJSON *item); 

(可用于输出到输出设备),使用完之后free(char *);

将JSON结构所占用的数据空间释放

cJSON *cJSON_CreateObject(void);

创建一个值类型的数据

cJSON *cJSON_CreateNumber(double num); 
cJSON *cJSON_CreateString(const char *string);
cJSON *cJSON_CreateArray(void);

例如:
cJSONroot=cJSON_CreateObject(); //创建一个json对象
cJSON
item=cJSON_CreateString(“Brett”); //由一个字符串生成一个cJSON的数据项
cJSON_AddItemToObject(root,“firstName”,item); //将上面生成的数据项和键值"firstname"一起添加道root对象里面去
这样就创建了一个cjson对象

向对象中添加键值对

cJSON_AddItemToObject(root, "keyvalue", 值类型数据相关函数()); 

keyvalue为键值

向对象中添加数组

cJSON_AddItemToObject(root, "keyvalue", cJSON_CreateArray());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值