cJSON详细剖析(二)——doit(char *text)函数框架及parse_string()函数分析

本文深入分析了JSON解析过程中的关键函数doit(),并详细解释了如何将文本解析为JSON格式,重点关注parse_string()函数的工作原理,包括字符串截取及UTF-16到UTF-8的转换细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里开始第二篇博客,正式的开始分析函数。

doit(char *text)

先分析main()函数里面出现的第一个函数吧,doit()这个函数前面有英文的简单介绍此函数是干什么的,大概意思就是将文本解析为JSON格式,然后在转化为文本格式,最后进行打印。我把一些代码自己的注释在了代码后边,如下图:

我先把text给贴出来方面大家对着代码观看:

我觉得这位作者代码功底很扎实(皮一下很开心,嘻嘻!),这代码就给人很清爽嘛,区区十来行,给人很容易理解。如果你只是需要大概的理解下该函数的作用的话,我想大概也就不需要再深究。不过因为我是来学习的,所以我得细究其具体的实现,那么我们就从第一个cJSON_Parse(text)开始跳转吧,进去看看卖的什么药。

嗯,不知道你们有没有哭,反正我是哭了,这跳转的有完没完的啊,我都不知道看到哪了。。。好吧,我们拿出小本本开始做笔记,把每一个函数的跳转记录下来。再一个一个的回去,这样就简单很多了。鉴于本人手写稿子实在是难看,我用visio画下来和大家比对比对(如果有看错的,欢迎大家留言讨论)。

如上图所示,当跳到parse_string()函数时就是最后一个函数了,还好只有五个函数,可是刚开始看得时候还是把我看晕了。嗯好了今天我们就解决parse_string()函数

parse_string()

我先讲讲这个函数时干什么的,这给代码就是把双引号之前的字符串截取出来,保存在item->valuestring中(后续会保存在item->string,而item->valuestring保存的是冒号之后的字符串)。如下图框出来的字符串:

其中第一个while()是为了获取字符串长度,需要把该字符串保存在out里面。

后续代码比较好理解我们主要来 分析下下个while语句中的switch语句。

要比较容易的看懂话, 我们对着前面的text1一起看,很明显在我全出来的第二个框里面,出现了‘ \\  ’,那就可以从这里开始一行一行代码的理解。

因为所举的例子也比较简单,直接就跳到default了。而里面比较复杂的是case 'u'; 所以我们还是主要来分析下这个case。我把test里面的text 都看了下,发现没有没出这种case的情况,所以如果想的话可以自己加个text,然后加个断点,进行调试一行一行进行分析,当然这有点耍小聪明了,哈哈。我就直接分析吧,后面可以在自己测试看分析的对不对。

这段代码的作用后面有写,就是将utf16的代码转化成utf8的代码。嗯。。。其实我对这些不太熟悉。我先去百度看看。

utf 是Unicode TransferFormat的缩写,即把Unicode转做为某种格式的意思。后面的数字表明至少使用多少个比特位来存储字符。我就不在这里仔细解释了,实在是费时间,我们还是搞快点比较好,如果想了解的话,这里贴一个大神讲的,讲的是真不错:https://blog.youkuaiyun.com/guxiaonuan/article/details/78678043

感到十分抱歉,我大概花了2小时来了解Unicode 、UTF8和UTF16, 内容实在是太多,这里就不在详细赘述了,如果真的想要详细了解的话,这里推荐大家看看有位大神写的博客,也就是我刚刚在看的博客,只是内容有点多。大家有兴趣的可以去看看,如果后续自己看完之后再来写一篇心得。传送门:https://www.cnblogs.com/benbenalin/p/7152570.html

就这样吧,我就不再仔细解释了,看了越多越觉得自己有太多不懂,还有太多的需要自己去掌握。希望自己好好的学习,望大家共勉。

 

 

很好的php的框架,学习研究都很不错!文件中包含doitphp框架,手册,所有的扩展库(ckeditor,fpdf,phpmailer,smarty,phprpc,tinymce,vdcode......) DoitPHP(原Tommyframework)是一个基于BSD开源协议发布的轻量级PHP框架。简而言之:DoitPHP运行高效,易学易用,易于扩展。换而言之:DoitPHP运行高效而不失功能强大,操作灵活而又能扩展自如。作为PHP框架里的“后起之秀”,DoitPHP秉承了那些优秀的PHP框架所共有的:代码的OOP编写风格、URL的路由功能、MVC的架构思想、UID的数据库操作、以及AJAX的前端页面技术支持。并在操作和功能设计上进行了微创新: 一、DoitPHP的辅助开发工具(DoitPHP Tools),其强大的“脚手架”功能,使得利用本框架进行程序开发更加容易。 、简明高效的视图运行机制,使视图文件的开发操作变得简单易行。 三、灵活的扩展模块(module)设计,能够非常容易地调用如:SMARTY、ADODB、CKEDITOR、TINYEDITOR、FPDF、PHPMAILER、PHPRPC等第三方开源程序。 四、集成了JQUERY及JQUERY FORM、LAZYLOAD等JQUERY插件,使前端页面开发中实现AJAX LOADING图片加载效果、灯箱效果(锁屏效果)、TAB菜单.、CHECKBOX的全选或反选效果以及图片的惰性加载效果等,让其变得得心应手。 五、提供了PHP程序开发中常用的操作类库,无论是COOKIE、SESSION的操作,还是实现网页页面的分页效果,实现音频、视频、图片幻灯片的播放,生成RAR、EXCEL、PDF等文件类型的文件,实现MEMCACH、XCACHE、APC等常见的缓存操作,实现WEB SERVICE等PHP的高级应用。利用扩展类库进行操作,如同“信手拈来”。 六、丰富的数据库驱动,支持MYSQL、POSTGRESQL、ORACLE、SQLITE、MSSQL、MONGODB、REDIS等数据库。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值