cJSON是使用C语言编写的   关于JSON数据的   编解码库,使用方便简单

编译时注意后面要跟-lm参数,否则编译会报错

解析JSON数据包流程:

1.调用cJSON_Parse()函数,解析JSON数据包,并按照cJSON结构体的结构序列化整个数据包。使用该函数会通过malloc()函数在内存中开辟一个空间,使用完成需要手动释放

cJSON *cJSON_Parse(const char *value)

2. 调用cJSON_GetObjectItem()函数,可从cJSON结构体中查找某个子节点名称(键名称),如果查找成功可把该子节点序列化到cJSON结构体中。

cJSON *cJSON_GetObjectItem(cJSON *object,const char *string)

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

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

void cJSON_Delete(cJSON *c)

下面是一个简单的解析函数例子:

void parseJson(char* pMsg)
{ cJSON* jsonRoot = cJSON_Parse(pMsg);//转化为JSON结构体,再进行解释 //注释部分格式化打印json数据
// char* out = cJSON_Print(jsonRoot);
// printf("%s\n",out);
// free(out); cJSON* item = cJSON_GetObjectItem(jsonRoot,"flvpath");//获取键名为"flvpath"的值
printf("\nflvpath type:%d,value:%s\n",item->type,item->valuestring); cJSON_Delete(jsonRoot);
}

稍微复杂一点的:

/*
jsondata={"cmd":"meetingmemberlist","memberinfos":[{"name":"李","number":"",
"status":"Offline"},{"name":"","status":"Offline"},
{"name":"1.221","number":"","status":"Offline"},{"name":"1.42","status":"Offline"}],
"session":"253398743ll","touid":"","xns":""}
*/
void ConferenceControlView::get_memberdata_from_jsondate(std::string jsondata)
{
cJSON* jsonRoot = cJSON_Parse(jsondata.c_str());//转化为JSON结构体,再进行解释
if(NULL == jsonRoot) return; #if 0
//注释部分格式化打印json数据
char* out = cJSON_Print(jsonRoot);
qDebug() << out;
free(out);
#endif
//获取键名为"memberinfos"的值
cJSON* item = cJSON_GetObjectItem(jsonRoot,"memberinfos");
if(NULL == item) return; int size = cJSON_GetArraySize(item);
DebugLog( << "size = " << size);
if( == size) return; cJSON *arr = item->child;
cJSON* item_chile = NULL;
for(int i = ;i < size;++i)
{
if(item_chile = cJSON_GetObjectItem(arr,"name")){
qDebug() << item_chile->valuestring;
}
if(item_chile = cJSON_GetObjectItem(arr,"number")){
qDebug() << item_chile->valuestring;
}
if(item_chile = cJSON_GetObjectItem(arr,"status")){
qDebug() << item_chile->valuestring << "\n";
}
arr = arr->next;
} cJSON_Delete(jsonRoot); }

下面是一段创建JSON数据代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"cJSON.h" int main()
{
cJSON * usr; usr=cJSON_CreateObject(); //创建根数据对象
cJSON_AddStringToObject(usr,"name","fengxin"); //加入键值,加字符串
cJSON_AddStringToObject(usr,"passwd","");
cJSON_AddNumberToObject(usr,"num",); //加整数 char *out = cJSON_PrintUnformatted(usr); //将json转为字符串形式
char *out1 = cJSON_Print(usr); //将json转为好看的字符串形式 cJSON_Delete(usr); // 释放内存 printf("%s\n",out);
printf("%s\n",out1); free(out);// 释放内存
free(out1);// 释放内存 }

结合 cJSON.c一起编译即可运行

编译gcc -o test   *.c   -lm

注意后面要跟-lm参数,否则编译会报错

结果如下:

最新文章

  1. 【干货分享】流程DEMO-补打卡
  2. [LeetCode] Contains Duplicate II 包含重复值之二
  3. Go语言程序设计(1)--基本语法
  4. jquery获取不到append出来的新元素的解决办法
  5. CSS中的绝对定位与相对定位
  6. SDP学习笔记
  7. bzoj 3144: [Hnoi2013]切糕 最小割
  8. ajax jsonp 原理 以及对数据的处理
  9. ExtJs007最常用的查询方法
  10. oracle pl/sql 函数
  11. Python编码与变量
  12. 利用开源项目jadx反编译Android应用
  13. Java编译时多态和运行时多态
  14. mac下git+maven+jenkins自动打包发布
  15. hbase 单机+伪分布环境搭建学习-1
  16. 解决点击tomcat的startup.bat一闪而过的问题
  17. 迷你MVVM框架 avalonjs 沉思录 第2节 DOM操作的三大问题
  18. SDOI2018 一轮培训划水祭
  19. ES6 中 Symbol.split的用法
  20. 如何通过 AAR 形式集成 leakcanary-android 服务

热门文章

  1. python3之日期和时间
  2. 五分钟学习React(一): 什么是React
  3. 大话命令之--ss
  4. 180114 用装饰器实现在不改变函数调用者的代码基础上,实现在函数执行前后分别打印&quot;before&quot; 和 &quot;after&quot;
  5. CCS入门基础
  6. JavaScript基础知识(概念、常量和变量)
  7. PIL遇到问题解决
  8. 从“思考”的角度来看如何成为一名优质的Java架构师
  9. ssh爆破篇
  10. 51Nod 1289 大鱼吃小鱼(模拟,经典好题)