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. Jerry的通过CDS view + Smart Template 开发Fiori应用的blog合集

    S4/HANA里有一个新的UI框架叫做Smart template, 配合ABAP后台的CDS view技术,能够让developer以Metadata driven的方式来开发Fiori应用, 这种 ...

  2. PostgreSQL查询优化器之grouping_planner

    grouping_planner主要做了3个工作: 对集合进行处理 对非SPJ函数进行优化 对SQL查询语句进行物理优化 grouping_planner实现代码如下: static void gro ...

  3. IdentityServer(15)- 第三方快速入门和示例

    这些示例不由IdentityServer团队维护. IdentityServer团队提供链接到了社区示例,但不能对示例做任何保证. 如有问题,请直接与作者联系. 各种ASP.NET Core安全示例 ...

  4. 设备树的interrupt

    http://www.cnblogs.com/targethero/p/5080499.html https://www.cnblogs.com/xiaojiang1025/p/6131381.htm ...

  5. Solidity 中文文档 —— 第一章:Introduction to Smart Contracts

    第一章:智能合约简介 粗略地翻译了 Ethereum 的智能合约开发语言的文档:Solidity.欢迎转载,注明出处. 有任何问题请联系我,本人微信:wx1076869692,更多详情见文末. 我是 ...

  6. 新浪新闻页面抓取(JAVA-Jsoup)

    1.使用gradle建立工程: 工程格式如下: include ':spider-demo' rootProject.name = 'my-spider-demo' settings def void ...

  7. dotnet core webapi +vue 搭建前后端完全分离web架构

    架构 服务端采用 dotnet core  webapi 前端采用: Vue + router +elementUI+axios 问题 使用前后端完全分离的架构,首先遇到的问题肯定是跨域访问.前后端可 ...

  8. 【JavaScript声明变量的规则】

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. BZOJ3529: [Sdoi2014]数表

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3529 挺恶心的数论TAT... 设f[i]是i的约数和,这个可以nln(n)扫出来. ans= ...

  10. hdu_1036(取整和格式控制)

    题意很简单,求平均时间 复习一下如何取整 (int) fl 是直接向下取整  ==  floor(fl) 向上取整 (int)(fl+1)  == ceil(fl) 四舍五入 (int)(fl+0.5 ...