cJSON详细剖析(四)----cJSON_Print()函数
今天我们讲讲cJSON_Print(json)函数时怎么实现的,我们按住F12点进去(vs编译器)。
如上图,我们继续跳。
因为p为null,所以这里在else里选中print_object()继续跳转。
print_object()
print_object()应该算是第一个有内容的函数了,这里我们分析这个print_object()函数。
上面图中我做了部分注释,根据text字符串(如下)我们知道,numentries应该是不等于0 的,又因为p为null,所以图中if()语句也不会跳进去。此外注意一下,depth指的是有几个缩进,也就是是有几个'\t'。
好了,我们拉到else语句,因为内容还是有点多,我贴出部分代码,图中有一部分注释。
我们主要看看while()里面的内容,print_string_str()函数我会在后面分析,大概的意思就是返回一个字符串形式的字符串,也就是说打印出来是带有双引号的而不是一串简单的字符。这里的print_value()函数,我们通过跳转也会发现最后还是调用print_string_str()函数,所以这就先不分析了,但意思还是可以看出来的,返回的应该还是一个字符串。
我们继续往下拉,一些不是不是很重要以及比较简单的就跳过了,接下来我们看最后的输出字符串out的部分。
上图我们能明显额看出来,在组装一个object型(可以看到有大括号)的字符串,其还是比较好理解的,需要记得是转义字符'\t' 代表的是缩进,也就是平时敲代码的tab键。到这里cJSON_Print()函数差不多也就讲完了,我也不知道如何细致的去讲解,抱歉了哈。
此外,我们根据字符串text,可以发现还有valuestring是数字和false的情况没有判断,我们继续把这个给判断了。
我们找到print_value函数,根据参数条件,找到else部分,框中的俩函数我们还没去分析,我们继续去分析。那就先分析print_number()函数吧。
到这里才发现,在分析cJSON_Parse()函数的时候就应该分析存储cJSON格式时的一些参数了,还是先去看看parse_value()函数。
嗯,想了下,上面的分析还是重开一博客写吧,这里写的已经够乱了。这里先把cJSON_Print()函数讲解完。如下图,我们把大概的print_object()函数讲解完。当然这里只是针对于某一种text,对于一些不同的text,可能用到的不同函数,我们后续再讲。
好吧,这里就这样,就先不写了,最近比较忙,反正也不着急,慢慢,总想一口气看完,哈哈哈。
cJSON详细剖析(四)----cJSON_Print()函数相关推荐
- 详细剖析平衡二叉树的四种旋转(附C++代码)
经过一天的学习,笔者发现网上少有人剖析平衡二叉树为何要分为四种旋转情况(尤其是LR型和RL型旋转),学习起来感觉云里雾里.查阅相关资料后,笔者整理了以下几种解释,其中夹杂着笔者自己的理解(笔者也是初学 ...
- sql replace替换多个字符_牛客网数据库SQL实战详细剖析(4150)
文章来源:大数据肌肉猿 作者:无精疯 这是一个系列文章,总共61题,分6期,有答案以及解题思路,并附上解题的一个思考过程.具体题目可参考牛客网的SQL实战模块:https://www.nowcoder ...
- libevent源码深度剖析四
libevent源码深度剖析四 --libevent源代码文件组织 1 前言 详细分析源代码之前,如果能对其代码文件的基本结构有个大概的认识和分类,对于代码的分析将是大有裨益的.本节内容不多,我想并不 ...
- sql not exists用法_牛客网数据库SQL实战详细剖析(5160)(更新完结)
文章来源:大数据肌肉猿 作者:无精疯 这是一个系列文章,总共61题,分6期,有答案以及解题思路,并附上解题的一个思考过程. 具体题目可参考牛客网的SQL实战模块: https://www.nowcod ...
- 详细解读SQL Server 函数
一旦成功地从表中检索出数据,就需要进一步操纵这些数据,以获得有用或有意义的结果.这些要求包括:执行计算与数学运算.转换数据.解析数值.组合值和聚合一个范围内的值等. 下表给出了T-SQL函数的类别和描 ...
- Linux网络通信----htonl()、htons()、ntohl()、ntohs()四个函数
转载:https://blog.csdn.net/miao19920101/article/details/69398158 前言: 今天在工作中用到htonl()这个函数,不是很理解,查阅资料之后随 ...
- 二进制文件的读写详细剖析
一).一般问题 二进制文件与我们通常使用的文本文件储存方式有根本的不同.这样的不同很难用言语表达,自己亲自看一看,理解起来会容易得多.因此,我推荐学习二进制文件读写的朋友安装一款十六进制编辑器.这样的 ...
- Java内置函数的理解和加减乘除四个函数的学习
arraycopy为System类自带的函数,可以通过Systems.arraycopy(-)这种形式直接调用. 以下为arraycopy的解释,请自行理解,填写下段代码的空行. public sta ...
- 在OpenCV环境下写的灰度图像二维傅里叶换,幅值计算,频谱平移和将数值归一化到0到255区间的四个函数
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 灰度图像的二维傅里叶变换(cv_gray_fft ...
最新文章
- 10 个最值得 Python 新人练手的有趣项目
- Shell(1)——执行脚本
- 官方首次披露,TDSQL十年自主可控之路(附PDF)
- iPhone失去反应咋办?
- Java 程序 ——感想
- iphone x php兼容吗,有关iOS11和iPhoneX的适配问题
- java中线程的生命周期_Java中的线程生命周期– Java中的线程状态
- 新汽车行业的中台实践
- opensuse 安装网易云音乐(tumbleweed)(leap)
- 360面试java经验_360测试开发技术面试题目
- 解决MySQL登录ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor)问题
- linux 安装minio并设置开机自启动
- (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
- 幻灯片相册制作PhotoStage
- outlook签名文件编辑_如何在Microsoft Outlook中创建,编辑和应用签名
- Chrome OS 与 Android 的生死爱欲
- Error:A JNI error has occurred, please check your installation and try again的解决方法
- ExecutorExecutorService
- 【element-plus】el-dialog距离顶部的高度
- PS画等分圆环的技巧
热门文章
- 用户openId 和 unionId 的区别
- VisualVM 启动报错Error Starting VisualVM:You are running VisualVM using Java Runtime Environment(JRE)
- android手机8g内存够用嘛,8G 运存已经过时了?手机运存到底要多大才够用?
- Win7(32bit) + VS2012 + Qt
- 修改Vue项目网页标题和ico
- 串口监听工具listen_串口命令解析
- linux打包文件夹命令
- OpenGL ES之离屏渲染的帧缓冲区对象FBO的说明和使用
- GetKeyState、GetAsyncKeyState、GetKeyboardState函数的区别:
- Nature Neuroscience:边中心功能网络模型下大脑系统水平的重叠组织构架