cJSON详细剖析(四)----cJSON_Print()函数

今天我们讲讲cJSON_Print(json)函数时怎么实现的,我们按住F12点进去(vs编译器)。

cJSON详细剖析(四)----cJSON_Print()函数

cJSON详细剖析(四)----cJSON_Print()函数

如上图,我们继续跳。

cJSON详细剖析(四)----cJSON_Print()函数

因为p为null,所以这里在else里选中print_object()继续跳转。如下

cJSON详细剖析(四)----cJSON_Print()函数

上面图中我做了部分注释,根据text字符串(如下)我们知道,numentries应该是不等于0 的,又因为p为null,所以图中if()语句也不会跳进去。此外注意一下,depth指的是有几个缩进,也就是是有几个'\t'。

cJSON详细剖析(四)----cJSON_Print()函数

我们直接拉到最后,我贴出部分代码,图中有一部分注释。

cJSON详细剖析(四)----cJSON_Print()函数

上图框中,我们继续跳转进去,下面就是print_String_ptr()函数,我已经贴好了注释,针对给定的text文件,就返回"\"name\""了。

cJSON详细剖析(四)----cJSON_Print()函数

为了帮助大家理解,我画个图估计就知道执行到哪了。如下图,我们就回到了print_object函数,返回值我已经在上图提到,就是"\"name\""。

cJSON详细剖析(四)----cJSON_Print()函数

我们回头查看print_obbject()函数对的while部分,我们可以继续跳到print_value()函数里面去看看,当然,经过print_string_str()函数的分析,我想大家应该可以猜到entries储存的是什么了。

cJSON详细剖析(四)----cJSON_Print()函数

现在我们跳转进去print_value()函数,最后我们发现还是跳转到了print_string_ptr()哈哈,嗯,既然已经分析过了,就不在分析了。我们继续回到print_object()函数,如下图,很明显这个应该就是最后成型的字符串了。我们可以对这里进行较为直写的分析。

cJSON详细剖析(四)----cJSON_Print()函数

我们根据字符串text,可以发现还有valuestring是数字和false的没有判断,我们继续把这个给判断了。

cJSON详细剖析(四)----cJSON_Print()函数

我们找到print_value函数,根据参数条件,找到else部分,框中的俩函数我们还没去分析,我们继续去分析。那就先分析print_number()函数吧。

cJSON详细剖析(四)----cJSON_Print()函数

到这里才发现,在分析cJSON_Parse()函数的时候就应该分析存储cJSON格式时的一些参数了,还是先去看看parse_Parse()函数。

cJSON详细剖析(四)----cJSON_Print()函数

嗯,想了下,上面的分析还是重开一博客写吧,这里写的已经够乱了。这里先把cJSON_Print()函数讲解完。如下图,我们把大概的print_object()函数讲解完。当然这里只是针对于某一种text,对于一些不同的text,可能用到的不同函数,我们后续再讲。

cJSON详细剖析(四)----cJSON_Print()函数

好吧,这里就这样,就先不写了,最近比较忙,反正也不着急,慢慢,总想一口气看完,哈哈哈。