cjson 增强对逗号处理
https://sourceforge.net/projects/cjson/
解析JSON比较好的轻量级工具,使用比较方便,今天测试发现有些JSON解析失败,但其他工具可以正常解析。
跟踪发现是cJSON对最后一个逗号分隔处理不足。譬如如下:
{"liveList":[{"name":"",},],"code":"",}
},]标识前面的逗号就会处理错误,理论上是空对象。
修改代码cJSon.c


测试代码:
int main(int argc, char * argv[])
{
char * buff = "{\"code\":\"0\",\"isPreview\":\"0\",\"isADFreeFlag\":\"1\",\"logincode\":\"1014\",\"titleName\":\"\",\"nodeName\":\"CCTV2\",\"objType\":\"live\",\"isAudio\":\"false\",\"audioDesc\":\"??:????|nodeId=10080903\",\"playUrl\":\"http://hls.cmvideo.cn:8088/WqkB2MJM359QHiQ2ShzkitfOjzdoiTz8MF+tjo3OiT1HFopoXQNYHgnkuOCcfZeS+VKurfyXjDfwlpH2/E2GcIPjOjisQkuoQ/rua4ZnuCEbgl1aN4DvlGHKCjETOnEQ/rl3/iqecLI7ukacQKRtCb8dCBxtJ2UflZxWNfzYsvABT2DGlQenXBXeeQFMN3gifppTiH9hGcZMozYca2ECqvx0QgZGyDEbJbCTDmOr5zp9sGGBQ/0M3pP0rFOS68Dy/cctv2_49.sdp.m3u8?ec=1\",\"param\":\"contentId=60098984520150511028;nodeId=10242984;objType=live;\",\"img\":\"\",\"uc\":\"\",\"mt\":\"\",\"ucmax\":\"\",\"dlnaRate\":\"\",\"keyword\":\"\",\"livePlayback\":\"true\",\"liveList\":[{\"sTime\":\"00:01\",\"eTime\":\"00:15\",\"name\":\"?????\",},{\"sTime\":\"00:15\",\"eTime\":\"01:12\",\"name\":\"????\",},{\"sTime\":\"01:12\",\"eTime\":\"02:13\",\"name\":\"?????\",},{\"sTime\":\"02:13\",\"eTime\":\"03:11\",\"name\":\"??\",},{\"sTime\":\"03:11\",\"eTime\":\"03:54\",\"name\":\"????\",},{\"sTime\":\"03:54\",\"eTime\":\"04:36\",\"name\":\"????\",},{\"sTime\":\"04:36\",\"eTime\":\"05:07\",\"name\":\"????\",},{\"sTime\":\"05:07\",\"eTime\":\"06:10\",\"name\":\"???\",},{\"sTime\":\"06:10\",\"eTime\":\"07:00\",\"name\":\"???\",},{\"sTime\":\"07:00\",\"eTime\":\"09:00\",\"name\":\"????\",},{\"sTime\":\"09:00\",\"eTime\":\"10:05\",\"name\":\"????\",},{\"sTime\":\"10:05\",\"eTime\":\"10:40\",\"name\":\"????\",},{\"sTime\":\"10:40\",\"eTime\":\"11:10\",\"name\":\"????\",},{\"sTime\":\"11:10\",\"eTime\":\"11:28\",\"name\":\"????\",},{\"sTime\":\"11:28\",\"eTime\":\"11:50\",\"name\":\"????\",},{\"sTime\":\"11:50\",\"eTime\":\"12:30\",\"name\":\"??????\",},{\"sTime\":\"12:30\",\"eTime\":\"13:21\",\"name\":\"????\",},{\"sTime\":\"13:21\",\"eTime\":\"14:33\",\"name\":\"????\",},{\"sTime\":\"14:33\",\"eTime\":\"15:28\",\"name\":\"??????\",},{\"sTime\":\"15:28\",\"eTime\":\"16:03\",\"name\":\"?????\",},{\"sTime\":\"16:03\",\"eTime\":\"16:29\",\"name\":\"????\",},{\"sTime\":\"16:29\",\"eTime\":\"17:11\",\"name\":\"????\",},{\"sTime\":\"17:11\",\"eTime\":\"17:44\",\"name\":\"????\",},{\"sTime\":\"17:44\",\"eTime\":\"18:29\",\"name\":\"???\",},{\"sTime\":\"18:29\",\"eTime\":\"18:52\",\"name\":\"????\",},{\"sTime\":\"18:52\",\"eTime\":\"19:25\",\"name\":\"????\",},{\"sTime\":\"19:25\",\"eTime\":\"20:00\",\"name\":\"????\",},{\"sTime\":\"20:00\",\"eTime\":\"20:30\",\"name\":\"????\",},{\"sTime\":\"20:30\",\"eTime\":\"21:20\",\"name\":\"??????\",},{\"sTime\":\"21:20\",\"eTime\":\"21:56\",\"name\":\"?????\",},{\"sTime\":\"21:56\",\"eTime\":\"22:30\",\"name\":\"??????\",},{\"sTime\":\"22:30\",\"eTime\":\"23:10\",\"name\":\"??????\",},{\"sTime\":\"23:10\",\"eTime\":\"23:43\",\"name\":\"?????\",},{\"sTime\":\"23:43\",\"eTime\":\"23:59\",\"name\":\"?????\",},{\"sTime\":\"23:59\",\"eTime\":\"23:59\",\"name\":\"?????\",},],\"preparam\":\"\",\"nextparam\":\"\",\"subList\":[],\"sTime\":\"20:00\",\"eTime\":\"20:30\",\"curDay\":\"\",\"supportRate\":\"rate5=;rate4=50_8;rate3=49_8;rate2=;rate1=48_8;\",\"matchedRate\":\"rate3\",}"; printf("################,start json:%s \n",buff); cJSON *root;
root = cJSON_Parse(buff); if (!root)
{
printf("######################!!!!!!!!!!!!!!!!!!!!!!!!!!Error before: [%s]\n",cJSON_GetErrorPtr());
return -;
} printf("################end json:\n"); return ;
}
cjson 增强对逗号处理的更多相关文章
- ES5对Array增强的9个API
为了更方便的对Array进行操作,ES5规范在Array的原型上新增了9个方法,分别是forEach.filter.map.reduce.reduceRight.some.every.indexOf ...
- 增强VPS SSH账号安全:改端口,禁用Root,密钥登录,Denyhosts防暴力攻击
VPS SSH账号是我们日常管理VPS的主要登入方式,尤其是Root账号,对Linux系统安全至关重要.以前好多站长喜欢用Putty中文版,这实际是别人修改官方Putty汉化而来,这些软件被植入了后门 ...
- 使用css3进行增强
使用css3进行增强 1,为元素创建圆角 border-radius:25px; .about img{ border: 5px solid #bebebe; float: left; margi ...
- JSON格式解析和libjson使用简介(关于cjson的使用示例)
JSON格式解析和libjson使用简介 在阅读本文之前,请先阅读下<Rss Reader实例开发之系统设计>一文. Rss Reader实例开发中,进行网络数据交换时主要使用到了两种数据 ...
- Django学习(九)---Templates过滤器及Django shell和Admin增强
一.Templates过滤器 过滤器属于django模板语言 修改模板中的变量,从而显示不同内容 {{ value | filter }} 举例:{{ list_nums | length}} ...
- Spring 通知和顾问进行增强
使用顾问增加前置增强和后置增强 <bean id="1" class="目标对象"></bean> <bean id=" ...
- 【转】cJSON 源码分析
cJSON源码分析 简介 由于C语言汇总,没有直接的字典,字符串数组等数据结构,所以要借助结构体定义,处理json. JSON是一种轻量级的数据交换格式.JSON采用完全独立与语言的文本格式,易于人阅 ...
- 【转】cJSON 源码阅读笔记
前言 cjson 的代码只有 1000+ 行, 而且只是简单的几个函数的调用. 而且 cjson 还有很多不完善的地方, 推荐大家看完之后自己实现一个 封装好的功能完善的 cjson 程序. json ...
- cJSON库的简单介绍及使用
转载:http://www.cnblogs.com/liunianshiwei/p/6087596.html JSON 语法是 JavaScript 对象表示法语法的子集.数据在键/值对中:数据由逗号 ...
随机推荐
- 分析一点python源代码
偶然看了一下python的部分源代码,感觉python的作者写的代码真心很美,简洁美观,学习之. 举几个例子抛砖引玉一下: def removedirs(name): ""&quo ...
- C# 驱动的mongodb的分页查询简单示例
/// <summary> /// mongodb分页查询 /// </summary> /// <typeparam name="T">< ...
- POJ-2503 Babelfish---map或者hash
题目链接: https://vjudge.net/problem/POJ-2503 题目大意: 就像查找一本字典,根据输入的条目和要查询的单词,给出查询结果(每个单词长度不超过10) 解题思路: ma ...
- Centos 5.5 编译安装mysql 5.5.9
下载mysql wget http://mysql.mirrors.pair.com/Downloads/MySQL-5.5/mysql-5.5.9.tar.gz 创建mysql用户 [root@x ...
- 将一个命令的输出保存到CSV文件
执行段: 结果段: 补充:配合不同的命令可以使工作更加简单 使用Imort-Csv命令从文件中导入结构化数据
- 2017.11.1 微型计算机原理与接口技术-----第七章 中断系统与8237A DMA控制器
第七章 微型计算机原理与接口技术-----中断系统与8237A DMA控制器 (1)数据传送的两种方式:中断方式和直接存储器存取方式(DMA):中断是微处理器与外部设备交换信息的一种方式:DMA是存储 ...
- 第43章 RTC—实时时钟—零死角玩转STM32-F429系列
第43章 RTC—实时时钟 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fireg ...
- 第一个AngularJS指令
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- Eclipse 修改默认工作空间
第一次启动Eclipse时会弹出对话框,让你进行Workspace Launcher,也就是设置Eclipse的项目存放路径.但是,当你勾选“Use this as the default and d ...
- SpringMVC使用ModelAndView的相对路径和绝对路径的问题
例如:abc/a/a.jsp,想要跳转到根目录的b.jsp 使用 ModelAndView 跳转, 若引用:org.springframework.web.portlet.ModelAndView 这 ...