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使用的更多相关文章

  1. 在不知道json格式的情况下如何使用cjson进行解析

    假设我们有一个json字符串,但是我们不知道这个json的组织方式,那么如何进行解析呢,下面就给一个小例子. 1.我们的json串如下: { "aStr": "aaaaa ...

  2. 使用cjson进行对象的嵌套封装

    共分两个部分,1)创建json.2)解析json 1)创建嵌套json的代码 char * makeJson() { cJSON * pRoot = NULL; cJSON * pSub_1 = NU ...

  3. 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 编 ...

  4. cJSON: 一个用c写的一个简单好用的JSON解析器

    转自:http://blog.csdn.net/chenzhongjing/article/details/9188347 下载地址: http://sourceforge.net/projects/ ...

  5. 使用 CJSON 在C语言中进行 JSON 的创建和解析的实例讲解

    本文用代码简单介绍cjson的使用方法,1)创建json,从json中获取数据.2)创建json数组和解析json数组 1. 创建json,从json中获取数据 #include <stdio. ...

  6. cJSON应用举例

    //在网上查了不少cJSON,结果只找到c语言字符串转换到JSON的实例,想转回来结果没有实例.自己琢磨了一个下午才敢下手.下面把转来转去的代码贴上. //百度网盘的 CJSON 实例源码 地址 ht ...

  7. JSON格式解析和libjson使用简介(关于cjson的使用示例)

    JSON格式解析和libjson使用简介 在阅读本文之前,请先阅读下<Rss Reader实例开发之系统设计>一文. Rss Reader实例开发中,进行网络数据交换时主要使用到了两种数据 ...

  8. Lua利用cjson读写json示例分享

    本文结合本人的实际使用经验和代码示例,介绍如何在Lua中对json进行encode和decode,需要的朋友可以参考下 我这里采用的是Lua CJson库,是一个高性能的JSON解析器和编码器,其性能 ...

  9. cJSON学习笔记

    1.JSON格式简述 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写,同时也易于机器解析和生成.它基于JavaScript(Standa ...

  10. cJSON 使用笔记

    缘      起 最近在stm32f103上做一个智能家居的项目,其中选择的实时操作系统是 rt_thread OS v1.2.2稳定版本,其中涉及到C和java(android)端数据的交换问题,经 ...

随机推荐

  1. python之tuple

    1.python元组 Python的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. #创建元组 >>> tuple2 = 123,456,'hel ...

  2. Chris Richardson微服务翻译:构建微服务之微服务架构的进程通讯

    Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯(本文) 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服 ...

  3. 利用.Net自带的票据完成BaseController的未登陆自动跳转到登陆页功能

    一:定义票据中要记录的字段类 /// <summary> /// 用户存在于浏览器端的身份票据(非持久) /// 非持久 FormsAuthenticationTicket 的isPers ...

  4. 富文本编辑器Quill的使用

    我们经常需要使用富文本编辑器从后台管理系统上传文字,图片等用于前台页面的显示,Quill在后台传值的时候需要传两个参数,一个用于后台管理系统编辑器的显示,一个用前台页面的显示,具体代码如下截图: 另Q ...

  5. 关于setTimeout的面试题

    于地铁上看了一篇帖子,关于setTimeout的面试题,觉得见得多,记录,以学习之. 我们都知道,这样的一个例子: for ( var i = 0;i<5; i++) { console.log ...

  6. ECharts模拟迁徙案例

    ECharts模拟迁徙案例 独立页面:http://211.140.7.173:8081/t/wuhairui/ditu/a.html

  7. 知乎上看到的关于类.class,对象.getClass

    public class TestDemo { //测试 @Test public void fun01() { TestDemo q=new TestDemo(); A a = new A(); q ...

  8. Python之排序算法:快速排序与冒泡排序

    Python之排序算法:快速排序与冒泡排序 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/7828610.html 入坑(简称IT)这一行也有些年头了,但自老师 ...

  9. 【JavaScript--String对象】

    JavaScript 字符串(String) 对象 String 对象属性 属性 描述 constructor 对创建该对象的函数的引用 lenght 字符串的长度 prototype 允许您向对象添 ...

  10. CTF---Web入门第五题 貌似有点难

    貌似有点难分值:20 来源: 西普学院 难度:难 参与人数:7249人 Get Flag:2519人 答题人数:2690人 解题通过率:94% 不多说,去看题目吧. 解题链接: http://ctf5 ...