cJSON_json包的C语言解析库
cJSON库描述
CJSON是一个用于解析JSON包的C语言库,库文件为cJSON.c和cJSON.h,
所有的实现都在这两个文件中。原作者的地址cJSON。
JSON包的解析
例如有一个JSON的数据包如下:
{
"rxpk": [
{
"tmst": 1868500100,
"time": "2016-07-07T13:20:40.003906Z",
"chan": 1,
"rfch": 0,
"freq": 779.7,
"stat": 1,
"modu": "LORA",
"datr": "SF9BW125",
"codr": "4/5",
"lsnr": 9.8,
"rssi": -37,
"size": 83,
"data": "QH/4iimAKgACB0KHP8e0IgQAhI0bBi9bvFfb8jHeSWEAhpnsCGHwt9pUCvrRMazQRBtN+kh3Ge5hFL8jUtHpk3luFtcTLlgGVMPSBLpSp8h6C44="
}
]
}
我们需要获取其中的data字段,需要进行的过程如下:
- 首先声明变量
cJSON *json;
cJSON *rxpk;
cJSON *arr0;
cJSON *data;
- 将上述的字符串进行解析,并保存在json中;
- 获取json其中的rxpk字段的内容,并保存在rxpk中;
- 获取rxpk中的arr部分,拿出一种的第一个数组,并保存在arr0;
- 获取arr0的data部分,并保存在data;
- 使用data->valuestring即可获取其中的data字段的内容
具体的代码实现如下所示:
uint16_t rxpk_data_get(char* text,char* dest_str)
{
uint16_t len = 0;
cJSON *json;
cJSON *data;
cJSON *arr0;
cJSON *rxpk;
json= cJSON_Parse(text);
if(!json)//对JSON包进行合法性检查
return 0;
rxpk = cJSON_GetObjectItem(json,"rxpk");
if(!rxpk)//对rxpk进行合法性检查
return 0;
arr0 = cJSON_GetArrayItem(rxpk,0);
if(!arr0)//对arr0进行合法性检查
return 0;
data =cJSON_GetObjectItem(arr0,"data");
if(!data)//对data进行合法性检查
return 0;
len = strlen(data->valuestring);
memcpy(dest_str,data->valuestring,len);
dest_str[len] = 0;
return len;
}
在json包中遇到数组时
/* Returns the number of items in an array (or object). */
extern int cJSON_GetArraySize(cJSON *array);
这个函数可以获取数组的长度。
cJSON_json包的C语言解析库的更多相关文章
- C语言cJSON库的使用,解析json数据格式
C语言cJSON库的使用,解析json数据格式 摘自:https://www.cnblogs.com/piaoyang/p/9274925.html 对于c语言来说是没有字典这样的结构的,所以对于解析 ...
- C语言实现的minixml解析库入门教程
minixml的中文说明手册:MiniXML中文文档.dochttp://wenku.baidu.com/view/25fd7d7f31b765ce050814f7.html xml源代码: < ...
- Tomjson - 一个"短小精悍"的 json 解析库
Tomjson,一个"短小精悍"的 json 解析库,tomjson使用Java语言编写,主要作用是把Java对象(JavaBean)序列化为json格式字符串,将json格式字符 ...
- Tomjson - json 解析库
Tomjson - 一个"短小精悍"的 json 解析库 Tomjson,一个"短小精悍"的 json 解析库,tomjson使用Java语言编写,主要作用是把 ...
- Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例
Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的 ...
- python3解析库BeautifulSoup4
Beautiful Soup是python的一个HTML或XML的解析库,我们可以用它来方便的从网页中提取数据,它拥有强大的API和多样的解析方式. Beautiful Soup的三个特点: Beau ...
- python应用之爬虫实战2 请求库与解析库
知识内容: 1.requests库 2.selenium库 3.BeautifulSoup4库 4.re正则解析库 5.lxml库 参考: http://www.cnblogs.com/wupeiqi ...
- 转载~kxcfzyk:Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解
Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解 多线程c语言linuxsemaphore条件变量 (本文的读者定位是了解Pthread常用多线程API和Pthread互斥锁 ...
- 【转】编译quickfast解析库(沪深level2行情转码库)
转自http://blog.csdn.net/hacode/article/details/7065889 编译quickfast解析库(沪深level2行情转码库) 目录(?)[-] 1 下载源代 ...
随机推荐
- This in JavaScript
声明 本文仅为读书笔记并致力于理解Js中的this关键字.如有雷同,纯属巧合.原因有二,其一:有幸看了同一本书,其二:this这玩意已被说烂了~ 为什么要用this? this提供了优雅的方式隐式传递 ...
- S2SH框架的集成
S2SH框架的集成 20131130 代码下载 : 链接: http://pan.baidu.com/s/1sz6cQ 密码: 513t 这一个星期的时间里,学习SSH框架技术,首先因为之前的项目用到 ...
- C#WebBrowser控件使用教程与技巧收集--苏飞收集
C#WebBrowser控件使用教程与技巧收集--苏飞收集 先来看看常用的方法 Navigate(string urlString):浏览urlString表示的网址 Navigate(System. ...
- NAS服务器局域网内IPad、手机、电视盒子等联网播放
为把各个移动硬盘和不同电脑的数据进行统一管理,入手了一台希捷 Seagate Business 无内置硬盘 商业级 2盘位 云存储网路存储,经过卖家指点和不断摸索,终于能用了,主要步骤如下: 1. 系 ...
- java代码实现如何获取当前经纬度?(安卓的话可以用GPS取)
import android.app.Activity; import android.os.Bundle; import android.location.*; import android.con ...
- C/C++在Java项目、Android和Objective-C三大平台下实现混合编程
Android和iOS开发都支持C++开发,可以一套代码多平台使用.同时C++难以反编译的特性也可以为Android开发带来代码的保密,另一native特性也可以提高代码的运行效率. 一.为什么使用C ...
- Windows环境下面搭建Object C开发环境[转]
1.安装编译器 Objective-C的编译器有很多,其中LLVM属于从GCC发展出来的,主要使用在苹果的平台中,GNU可以使用GnuStep,网址是http://wwwmain.gnustep.or ...
- AngularJS datepicker 和 datatimepicker
本文内容 项目结构 AngularJS datepicker AngularJS+jQueryUI datetimepicker 本文介绍 AngualrJS datetimepicker 控件.说明 ...
- 【linux】如何将Vim打造成一个成熟的IDE
如果你稍微写过一点代码,就能知道“集成开发环境”(IDE)是多么的便利.不管是Java.C还是Python,当IDE会帮你检查语法.后台编译,或者自动导入你需要的库时,写代码就变得容易许多.另外,如果 ...
- SQL Server死锁
SQL Server死锁 多个事务之间互相等待对方的资源,导致这些事务永久等待 注意是永久等待,而非长事务 死锁的4个条件 互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程 ...