cJSON使用教程_json文件存取、cJSON实体获取json数据

cJSON使用教程_json文件存取、cJSON实体获取json数据cJson 使用有如下 json 数据 我们学习如何解析它 id 100 username maye password

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

cJson使用

有如下json数据,我们学习如何解析它:

{ "id":100, "username":"maye", "password":"", "online":false }

从文件读取json数据

首先我们从文件中获取json数据:

const char* jsonFromFile(const char* filename) { FILE* fp = fopen(filename, "r"); if (!fp) { return NULL; } fseek(fp, 0, SEEK_END); long len = ftell(fp); fseek(fp, 0, SEEK_SET); char* buf = calloc(len+1, sizeof(char)); fread(buf, sizeof(char), len, fp); fclose(fp); return buf; } int main() { const char* jsondata = jsonFromFile("test.json"); printf("%s\n", jsondata);    cJSON* root = cJSON_Parse(jsondata);//解析json数据     //TODO 在这插入其他代码 free(jsondata);//释放内存 cJSON_free(root); return 0; }

获取cJSON文本

在解析或者生成json数据之后,如果需要从cJSON实体中获得文本,可以使用以下四种方式。

cJSON_Print

函数原型:char * cJSON_Print(const cJSON *item);

该函数将一个cJSON实体渲染为字符串(有格式),注意:返回的字符串需要手动释放内存

char* cjson = cJSON_Print(root); printf("%s\n", cjson); cJSON_free(cjson);//释放

效果:

cJSON使用教程_json文件存取、cJSON实体获取json数据

cJSON_PrintUnformatted

函数原型:char * cJSON_PrintUnformatted(const cJSON *item);

该函数将一个cJSON实体渲染为字符串(无格式,所占内存更小,便于传输),注意:返回的字符串需要手动释放内存

cjson = cJSON_PrintUnformatted(root); printf("%s\n", cjson); cJSON_free(cjson); //释放

效果:

cJSON使用教程_json文件存取、cJSON实体获取json数据

cJSON_PrintBuffered

函数原型:char * cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt)

使用缓冲策略将一个cJSON实体呈现为文本。Prebuffer是对最终大小的猜测。“猜得好”减少了再分配,提升了效率。Fmt 指定是否格式化json数据。注意:返回的字符串需要手动释放内存

cjson = cJSON_PrintBuffered(root, strlen(jsondata) + 5, cJSON_True); printf("%s\n", cjson); cJSON_free(cjson); //释放

cJSON_PrintPreallocated

使用已经在内存中分配的具有给定长度的缓冲区将一个cJSON实体渲染为文本。成功时返回1,失败时返回0。 注意:返回值为是否渲染成功,使用缓冲区之前先进行判断

char buf[1024] = { 0 };//预先准备缓冲区 cJSON_bool ret = cJSON_PrintPreallocated(root, buf, sizeof(buf), cJSON_True); if (ret) { printf("%s\n", buf); } //这里就不需要释放了

json数据写入文件

获得json文本之后,我们就可把它保存起来了,同样使用文件操纵,非常滴简单!

//把json数据写入文件,返回写入成功的字节数 int jsonSaveFile(const char* filename,const char* cjson) { FILE* fp = fopen(filename, "w"); if (!fp) { return NULL; } size_t len = fwrite(cjson, sizeof(char), strlen(cjson), fp); fclose(fp); return len; } int main() { const char* jsondata = jsonFromFile("test.json"); cJSON* root = cJSON_Parse(jsondata);//解析json数据 free(jsondata);//释放内存 //将一个cJSON实体渲染为字符串(无格式,所占内存更小,便于传输),注意:同上 cjson = cJSON_PrintUnformatted(root); printf("%s\n", cjson); jsonSaveFile("format.json", cjson); cJSON_free(cjson); cJSON_free(root); return 0; }

结果:

cJSON使用教程_json文件存取、cJSON实体获取json数据

cJSON使用教程_json文件存取、cJSON实体获取json数据

cJSON解析json数据和从文件读取,保存到文件的内容就到这啦~接下来会为大家带来更多cJSON库使用技巧,喜欢的不如点个“在看”吧

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

(0)

相关推荐

发表回复

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

关注微信