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)端数据的交换问题,经 ...
随机推荐
- Python爬虫下载美女图片(不同网站不同方法)
声明:以下代码,Python版本3.6完美运行 一.思路介绍 不同的图片网站设有不同的反爬虫机制,根据具体网站采取对应的方法 1. 浏览器浏览分析地址变化规律 2. Python测试类获取网页内容,从 ...
- 厉害了,龙果!开源中国颁发了证书:GVP-码云最有价值开源项目
roncoo-pay (龙果支付系统) roncoo-pay是国内首款开源的互联网支付系统,其核心目标是汇聚所有主流支付渠道,打造一款轻量.便捷.易用,且集支付.资金对账.资金清结算于一体的支付系统, ...
- 如何删除chrome地址栏里面曾经输错的地址
在chrome浏览器的地址栏输入你想删除的网址的部分字幕,比如,在地址栏输入form,然后用键盘上的方向键定位到你想删除的那个错误的地址,如下图所示 然后在键盘上按 shift+del 组合键将其 ...
- web.xml解析
常用元素及含义 <!-- standalone 定义了外部定义的 DTD 文件的存在性,有效值是 yes和 no --> <?xml version="1.0" ...
- 51 nod 1227 平均最小公倍数
原题链接 Lcm(a,b)表示a和b的最小公倍数,A(n)表示Lcm(n,i)的平均数(1 <= i <= n), 例如:A(4) = (Lcm(1,4) + Lcm(2,4) + Lcm ...
- Gym 100952G&&2015 HIAST Collegiate Programming Contest G. The jar of divisors【简单博弈】
G. The jar of divisors time limit per test:2 seconds memory limit per test:64 megabytes input:standa ...
- [bzoj3673] 可持久化并查集 by zky
总感觉到现在才来写这题有点奇怪. 并查集如果按秩合并的话,每次合并只会修改一个点的父亲. 用可持久化线段树来实现可持久化数组就行了.. 然而我写的是按子树大小合并..结果比按秩合并慢了一点>_& ...
- @requestBody注解
- NYOJ 2356 哈希计划(模拟)
题目链接: http://acm.nyist.me/JudgeOnline/problem.php?id=2356 题目描述 众所周知,LLM的算法之所以菜,就是因为成天打游戏,最近LLM突然想玩&l ...
- JavaScript八张思维导图—基本语句
JS基本概念 JS操作符 JS基本语句 JS数组用法 Date用法 JS字符串用法 JS编程风格 JS编程实践 不知不觉做前端已经五年多了,无论是从最初的jQuery还是现在火热的Angular,Vu ...