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 下载源代 ...
随机推荐
- linux nc (NetCat) 命令详解
原文:http://www.huanxiangwu.com/477/linux-nc-netcat 一.版本通常的Linux发行版中都带有NetCat(简称nc),甚至在拯救模式光盘中也由busybo ...
- android: 使用通知
8.1 使用通知 通知(Notification)是 Android 系统中比较有特色的一个功能,当某个应用程序希望向 用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现.发 ...
- Android运行时异常“Binary XML file line # : Error inflating class”
http://blog.csdn.net/huangxiaohu_coder/article/details/8497286 在原生Android下编译APK,编译没有问题,但是在运行的时候经常出现如 ...
- Docker实践(1)—入门
tutorial centos6.5环境. # yum install docker-io -y 会依赖安装libcgroup,lxc,lxc-libs 启动docker # service dock ...
- Grunt 新手指南
导言 作为一个正在准备从java 后端转大前端,一直都有想着,在js 的世界里面有没有类似于maven或者gradle 的东西..然后,就找到了grunt 这玩意 Grunt是用来干什么的 诸如ant ...
- JAX-RS(基于Jersey) + Spring 4.x + MyBatis构建REST服务架构
0. 大背景 众所周知,REST架构已经成为现代服务端的趋势. 很多公司,已经采用REST作为App, H5以及其它客户端的服务端架构. 1. 什么是JAX-RS? JAX-RS是JAVA EE6 引 ...
- Node.js 在 PayPal实战
之前有过一个谈了很多关于PayPal移动到node.js的一个应用平台.作为设置我的免费用户界面的第1部分的延续,我很高兴地说,这些传言是真的,我们的Web应用程序正在从Java迁移到JavaScri ...
- java单例之enum实现方式
传统的两私有一公开(私有构造方法.私有静态实例(懒实例化/直接实例化).公开的静态获取方法)涉及线程安全问题(即使有多重检查锁也可以通过反射破坏单例), 目前最为安全的实现单例的方法是通过内部静态en ...
- ECshop鼠标划过弹出 微信扫一扫代码
效果如上图 安装步骤:1,将以下代码放到page_header.lbi里 <div class="f_l"><a href="../index.p ...
- 提示Can't load package:dclite70.bpl解决方法
64位系统安装Delphi7提示Can’t load package:dclite70.bpl 2015年04月05日 ⁄ 杂谈 ⁄ 共 392字 ⁄ 字号 小 中 大 ⁄ 暂无评论 ⁄ 阅读 1,7 ...