开发者社区> 范大脚脚> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

cJSON应用举例

简介:
+关注继续查看

*先C转成JSON的字符串,然后再把这个JSON的字符串转回来。

 

*******************************************/

 

#include "stdio.h"

 

#include "cjson.h"

 

/*******************************

 

* 建一个工程把"cjson.c"也加进去。

 

* 要是不想建工程,那就把下面这个注释去掉。

 

* 虽然正常人不这么干,但图个方便,也不管那么多了。

 

*******************************/

 

//#include "cjson.c"

 

int main_()
{

 

  //首先是用C转换成JSON
char *out ;
cJSON *root,*fmt;
root=cJSON_CreateObject();//创建项目
cJSON_AddItemToObject(root, "name", cJSON_CreateString("Jack (\"Bee\") Nimble"));
cJSON_AddItemToObject(root, "format", fmt=cJSON_CreateObject());//在项目上添加项目
cJSON_AddStringToObject(fmt,"type", "rect");//在项目上的项目上添加字符串,这说明cJSON是可以嵌套的
cJSON_AddNumberToObject(fmt,"width", 1920);
cJSON_AddNumberToObject(fmt,"height", 1080);
cJSON_AddNumberToObject(fmt,"frame rate", 24);

 

out=cJSON_Print(fmt);
printf("%s\n",out);//此时out指向的字符串就是JSON格式的了
free(out);//释放空间

 

  //接下来进行JSON格式向回转换

 

  cJSON *fmt = NULL,*JSONroot = NULL;

 

  num = cJSON_GetArraySize(JSONroot);//看看有多少个项目

 

  fmt = cJSON_GetObjectItem(JSONroot,"name");

 

  char name[256];

 

  snprintf(name,256,"%s",fmt->valuestring);//把fmt指向的JSON节点的字符串复制到name数组里来。

 

  //JSON是采用链式存储的,就是链表存储。具体的结构体可以在"cjson.h"里面找到

 

  /* The cJSON structure: */
//typedef struct cJSON {
// struct cJSON *next,*prev; /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */
// struct cJSON *child; /* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */

// int type; /* The type of the item, as above. */

// char *valuestring; /* The item's string, if type==cJSON_String */
// int valueint; /* The item's number, if type==cJSON_Number */
// double valuedouble; /* The item's number, if type==cJSON_Number */

// char *string; /* The item's name string, if this item is the child of, or is in the list of subitems of an object. */
//} cJSON;

 

  cJSON *child;

 

  fmt = cJSON_GetObjectItem(JSONroot,"format");

 

  child = cJSON_GetObjectItem(fmt,"type");

 

  char type[256];

 

  snprintf(type,256,"%s",child->valuestring);

 

  child = cJSON_GetObjectItem(fmt,"width");

 

  int width = child->valueint;

 

  child = cJSON_GetObjectItem(fmt,"height");

 

  int heigh = child->valueint;

 

  child = cJSON_GetObjectItem(fmt,"frame rate");

 

  int frame = child->valueint;

 

return 0;
}

 

补充一篇CJSON实例(创建和解析json对象、创建和解析json数组)《使用 CJSON 在C语言中进行 JSON 的创建和解析的实例讲解

 不过使用cJSON的时候要注意,不要忘了cJSON_Delete()释放JSON的内存,和用free()释放cJSON_Print()或者cJSON_PrintUnformatted()返回的内存,否则会造成内存混乱。

如果不想纠结内存管理方面的问题,可以考虑使用jsoncpp,这样就可以不去考虑内存的释放了



本文转自郝峰波博客园博客,原文链接:http://www.cnblogs.com/fengbohello/p/3226624.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
CS5中动作和批处理
  动作类似office里的宏。   窗口---动作。排列过多的图片可以窗口---排列。   先新组,然后新动作,完成后停止录制;点击新图片使其成为当前图片,再点击播放动作。   一个新组下可以有很多动作。
587 0
c#泛型的使用
在2005年底微软公司正式发布了C# 2.0,与C# 1.x相比,新版本增加了很多新特性,其中最重要的是对泛型的支持。通过泛型,我们可以定义类型安全的数据结构,而无需使用实际的数据类型。这能显著提高性能并得到更高质量的代码。
1011 0
+关注
3656
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载