cJSON使用
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参数,否则编译会报错
结果如下:

cJSON使用的更多相关文章
- 在不知道json格式的情况下如何使用cjson进行解析
假设我们有一个json字符串,但是我们不知道这个json的组织方式,那么如何进行解析呢,下面就给一个小例子. 1.我们的json串如下: { "aStr": "aaaaa ...
- 使用cjson进行对象的嵌套封装
共分两个部分,1)创建json.2)解析json 1)创建嵌套json的代码 char * makeJson() { cJSON * pRoot = NULL; cJSON * pSub_1 = NU ...
- mac 下安装 lua5.3 + cjson
1.lua 5.3的安装 直接去官网下载 http://www.lua.org/ftp/lua-5.3.3.tar.gz make macosx sudo make install 2.CSJON 编 ...
- cJSON: 一个用c写的一个简单好用的JSON解析器
转自:http://blog.csdn.net/chenzhongjing/article/details/9188347 下载地址: http://sourceforge.net/projects/ ...
- 使用 CJSON 在C语言中进行 JSON 的创建和解析的实例讲解
本文用代码简单介绍cjson的使用方法,1)创建json,从json中获取数据.2)创建json数组和解析json数组 1. 创建json,从json中获取数据 #include <stdio. ...
- cJSON应用举例
//在网上查了不少cJSON,结果只找到c语言字符串转换到JSON的实例,想转回来结果没有实例.自己琢磨了一个下午才敢下手.下面把转来转去的代码贴上. //百度网盘的 CJSON 实例源码 地址 ht ...
- JSON格式解析和libjson使用简介(关于cjson的使用示例)
JSON格式解析和libjson使用简介 在阅读本文之前,请先阅读下<Rss Reader实例开发之系统设计>一文. Rss Reader实例开发中,进行网络数据交换时主要使用到了两种数据 ...
- Lua利用cjson读写json示例分享
本文结合本人的实际使用经验和代码示例,介绍如何在Lua中对json进行encode和decode,需要的朋友可以参考下 我这里采用的是Lua CJson库,是一个高性能的JSON解析器和编码器,其性能 ...
- cJSON学习笔记
1.JSON格式简述 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写,同时也易于机器解析和生成.它基于JavaScript(Standa ...
- cJSON 使用笔记
缘 起 最近在stm32f103上做一个智能家居的项目,其中选择的实时操作系统是 rt_thread OS v1.2.2稳定版本,其中涉及到C和java(android)端数据的交换问题,经 ...
随机推荐
- ASP.NET 设计模式:设计模式和原则简述
设计模式的概念 设计模式是高层次的.抽象的解决方案模板.可以将这些模式视为解决方案的蓝本而不是解决方案本身.通常是通过重构自己的代码并将问题泛化来实现设计模式. 软件设计中常见的模式大体分为三类: 创 ...
- JMeter-接口自动化之正则表达式关联
jmeter中,接口自动化的关键在于参数关联.比如需要登录的接口,如何调用登录口令?一个增删改查的闭环,如何将接口参数上下传递?下面就以实际的例子来仔细说一说 1:登录接口 这里有一个实际的登录接口, ...
- ABP Zero 导航菜单之角色权限
本文的项目是官网生成,项目名称为XX,WEB为MVC,以Users权限模块为例解说文章. 1.定义PermissionNames PermissionNames是一个静态类,它在/XX.Core/Au ...
- Golang 网络爬虫框架gocolly/colly 五 获取动态数据
Golang 网络爬虫框架gocolly/colly 五 获取动态数据 gcocolly+goquery可以非常好地抓取HTML页面中的数据,但碰到页面是由Javascript动态生成时,用goque ...
- ubuntu下查看-卸载软件(卸载.net core sdk的方法)
查看已安装的包:dpkg --list 查看正则匹配的包:dpkg --list 'dotnet-*' //查看以dotnet-开头的包 卸载匹配的包:sudo apt-get --purge rem ...
- BZOJ 1432: [ZJOI2009]Function(新生必做的水题)
1432: [ZJOI2009]Function Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1205 Solved: 895[Submit][Sta ...
- [51nod1299]监狱逃离
到现在还是不会写系列,直接贴题解了. http://www.51nod.com/question/index.html#!questionId=1157 #include<cstdio> ...
- See you~(二维树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1892 See you~ Time Limit: 5000/3000 MS (Java/Others) ...
- POI实现大数据EXCLE导入导出,解决内存溢出问题
使用POI能够导出大数据保证内存不溢出的一个重要原因是SXSSFWorkbook生成的EXCEL为2007版本,修改EXCEL2007文件后缀为ZIP打开可以看到,每一个Sheet都是一个xml文件, ...
- ubantu下su命令Authentication failure失败的解决方式
Ubuntu安装后,root用户默认是被锁定了的,不允许登录,也不允许 su 到 root . 可以使用: sudo passwd 来重新设置root密码,后即可登陆root. ortonwu@ubu ...