今天我们讲讲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()函数相关推荐

  1. 详细剖析平衡二叉树的四种旋转(附C++代码)

    经过一天的学习,笔者发现网上少有人剖析平衡二叉树为何要分为四种旋转情况(尤其是LR型和RL型旋转),学习起来感觉云里雾里.查阅相关资料后,笔者整理了以下几种解释,其中夹杂着笔者自己的理解(笔者也是初学 ...

  2. sql replace替换多个字符_牛客网数据库SQL实战详细剖析(4150)

    文章来源:大数据肌肉猿 作者:无精疯 这是一个系列文章,总共61题,分6期,有答案以及解题思路,并附上解题的一个思考过程.具体题目可参考牛客网的SQL实战模块:https://www.nowcoder ...

  3. libevent源码深度剖析四

    libevent源码深度剖析四 --libevent源代码文件组织 1 前言 详细分析源代码之前,如果能对其代码文件的基本结构有个大概的认识和分类,对于代码的分析将是大有裨益的.本节内容不多,我想并不 ...

  4. sql not exists用法_牛客网数据库SQL实战详细剖析(5160)(更新完结)

    文章来源:大数据肌肉猿 作者:无精疯 这是一个系列文章,总共61题,分6期,有答案以及解题思路,并附上解题的一个思考过程. 具体题目可参考牛客网的SQL实战模块: https://www.nowcod ...

  5. 详细解读SQL Server 函数

    一旦成功地从表中检索出数据,就需要进一步操纵这些数据,以获得有用或有意义的结果.这些要求包括:执行计算与数学运算.转换数据.解析数值.组合值和聚合一个范围内的值等. 下表给出了T-SQL函数的类别和描 ...

  6. Linux网络通信----htonl()、htons()、ntohl()、ntohs()四个函数

    转载:https://blog.csdn.net/miao19920101/article/details/69398158 前言: 今天在工作中用到htonl()这个函数,不是很理解,查阅资料之后随 ...

  7. 二进制文件的读写详细剖析

    一).一般问题 二进制文件与我们通常使用的文本文件储存方式有根本的不同.这样的不同很难用言语表达,自己亲自看一看,理解起来会容易得多.因此,我推荐学习二进制文件读写的朋友安装一款十六进制编辑器.这样的 ...

  8. Java内置函数的理解和加减乘除四个函数的学习

    arraycopy为System类自带的函数,可以通过Systems.arraycopy(-)这种形式直接调用. 以下为arraycopy的解释,请自行理解,填写下段代码的空行. public sta ...

  9. 在OpenCV环境下写的灰度图像二维傅里叶换,幅值计算,频谱平移和将数值归一化到0到255区间的四个函数

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 灰度图像的二维傅里叶变换(cv_gray_fft ...

最新文章

  1. 10 个最值得 Python 新人练手的有趣项目
  2. Shell(1)——执行脚本
  3. 官方首次披露,TDSQL十年自主可控之路(附PDF)
  4. iPhone失去反应咋办?
  5. Java 程序 ——感想
  6. iphone x php兼容吗,有关iOS11和iPhoneX的适配问题
  7. java中线程的生命周期_Java中的线程生命周期– Java中的线程状态
  8. 新汽车行业的中台实践
  9. opensuse 安装网易云音乐(tumbleweed)(leap)
  10. 360面试java经验_360测试开发技术面试题目
  11. 解决MySQL登录ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor)问题
  12. linux 安装minio并设置开机自启动
  13. (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  14. 幻灯片相册制作PhotoStage
  15. outlook签名文件编辑_如何在Microsoft Outlook中创建,编辑和应用签名
  16. Chrome OS 与 Android 的生死爱欲
  17. Error:A JNI error has occurred, please check your installation and try again的解决方法
  18. ExecutorExecutorService
  19. 【element-plus】el-dialog距离顶部的高度
  20. PS画等分圆环的技巧

热门文章

  1. 用户openId 和 unionId 的区别
  2. VisualVM 启动报错Error Starting VisualVM:You are running VisualVM using Java Runtime Environment(JRE)
  3. android手机8g内存够用嘛,8G 运存已经过时了?手机运存到底要多大才够用?
  4. Win7(32bit) + VS2012 + Qt
  5. 修改Vue项目网页标题和ico
  6. 串口监听工具listen_串口命令解析
  7. linux打包文件夹命令
  8. OpenGL ES之离屏渲染的帧缓冲区对象FBO的说明和使用
  9. GetKeyState、GetAsyncKeyState、GetKeyboardState函数的区别:
  10. Nature Neuroscience:边中心功能网络模型下大脑系统水平的重叠组织构架