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(十一)
习题 11: 提问 我已经出过很多打印相关的练习,让你习惯写简单的东西,但简单的东西都有点无聊,现在该跟上脚步了.我们现在要做的是把数据读到你的程序里边去.这可能对你有点难度,你可能一下子不明白,不过 ...
- MSMQ学习笔记二——创建Message Queue队列
一.创建Message Queue队列的主要流程 1.定义MQQUEUEPROPS 结构: 2.设置消息队列属性: 3.初始化MQQUEUEPROPS 结构: 4.调用MQCreateQueue创建队 ...
- 进程管理—进程描述符(task_struct)
http://blog.csdn.net/qq_26768741/article/details/54348586 当把一个程序加载到内存当中,此时,这个时候就有了进程,关于进程,有一个相关的叫做进程 ...
- 2017.10.25 Java List /ArrayList 三种遍历方法
java list三种遍历方法性能比较 学习java语言list遍历的三种方法,顺便测试各种遍历方法的性能,测试方法为在ArrayList中插入记录,然后遍历ArrayList,测试代码如下: pac ...
- Linux下C程序进程地址空间布局[转]
我们在学习C程序开发时经常会遇到一些概念:代码段.数据段.BSS段(Block Started by Symbol) .堆(heap)和栈(stack).先看一张教材上的示意图(来源,<UNIX ...
- python解析ini文件
python解析ini文件 使用configparser - Configuration file parser sections() add_section(section) has_section ...
- java TCP通信 socket 套接字 用图片上传轰炸服务器
客户端 package com.swift.jinji; import java.io.FileInputStream; import java.io.IOException; import java ...
- java基础必备单词讲解 day six
development development development development 开发 development developmentenvironment environment en ...
- 《C++总结3》
派生类 Class student1:public student //表示公用继承,默认为私有的 { public : …… …… } 继承的时候一定是全部继承来,但是可以自己设定访问属性,或 ...
- Swift项目,适配遇到的问题
Swift4.x 控制器自带xib加载在iOS8系统崩溃 // MARK: - 解决控制器自带xib加载在iOS8系统崩溃的问题.iOS8.x,需要给控制器的xib重写一下init 方法 overri ...