cJson数据解析之key/value解析

cJson数据解析之key/value解析1 cJson 核心结构体 cJSON 的核心结构体就是一个 cJSON 理解了这个结构体 基本上对 cJSON 的使用就有了个基本概念了

大家好,欢迎来到IT知识分享网。

1, cJson核心结构体

cJSON的核心结构体就是一个cJSON,理解了这个结构体,基本上对cJSON的使用就有了个基本概念了。该结构体具体定义如下:

typedef struct cJSON { struct cJSON *next;//双向链表的前后向指针 struct cJSON *prev; struct cJSON *child;//指向数组或对象的子链 int type;//元素类型 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类型,则valuedouble中存储着值。访问valuedouble,可以得到值。

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

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

2,解析key/value

首先是一个简单的键值对字符串,要解析的目标如下:

{ "name":"maye" }

要进行解析,也就是要分别获取到键与值的内容。我们很容易就能看出键为name,值为maye,可是,使用cJSON怎么解析呢?

对于这个简单的例子,只需要调用cJSON的三个接口函数就可以实现解析了,这四个函数的原型如下:

cJSON * cJSON_Parse(const char *value); cJSON * cJSON_GetObjectItem(const cJSON * const object, const char * const string); char * cJSON_GetStringValue(const cJSON * const item); void cJSON_Delete(cJSON *item)

面按解析过程来描述一次:

  1. 首先调用cJSON_Parse()函数,解析JSON数据包,并按照cJSON结构体的结构序列化整个数据包。使用该函数会通过malloc()函数在内存中开辟一个空间,使用完成需要手动释放。
  2. json_string表示json数据,可以从文件中读取,也可以直接用数组存储。
cJSON* root=cJSON_Parse(json_string);
  1. 调用cJSON_GetObjectItem()函数,可从cJSON结构体中查找某个子节点名称(键名称),如果查找成功可把该子节点序列化到cJSON结构体中。
  2. cJSON* item=cJSON_GetObjectItem(root,”name”);

如果需要使用cJSON结构体中的内容,可通过cJSON结构体中的valuedouble和valuestring取出有价值的内容(即键的值)。

本例子中,我们直接访问 item->valuestring 就获取到 “maye” 的内容了。

同时cJson给我们提供了函数用来获取字符串和数值(cJSON_GetStringValue,cJSON_GetNumberValue)

(4) 通过cJSON_Delete(),释放cJSON_Parse()分配出来的内存空间。

cJSON_Delete(root);

这样就完成了一次cJSON接口调用,实现了解析工作。使用起来其实也很简单的啊。

cJson数据解析之key/value解析

cJSON解析键值对的内容就到这啦~接下来会为大家带来更多cJSON库使用技巧,喜欢的不如点个“在看”吧

cJson数据解析之key/value解析

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/98022.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信