这里我们针对test.c里面的create_objects()函数进行向下解析。
如上图框住的部分,我们就此来分析cJSON_AddItemToObject()函数。根据参数我们先分析cJSON_CreateString()函数。
cJSON_CreateString()
此函数在cJSON里面用了一行,为了更好的阅读,我把它按照正常的形式展开了。这段代码很简单,就是新建一个item的cJSON结构体指针,然后把string赋值给valuestring。最后返回该结构体指针。
我们回到cJSON_AddItemToObject()函数,我们继续跳转进去。
cJSON_AddItemToObject()
这个函数也比较简洁,就最后一行代码可能需要跳转进去看看是干什么的,因为我已经看过了,所以我把大概的意思写出来了。接下来我们看看是怎么实现的。
cJSON_AddItemToArray()
如下图,我把一些必要的注释写出来了,最后的suffix_object()函数就是将俩结点连接起来,我贴一下代码。
cJSON_AddItemToObject()
最后我们一步一步返回,回到了最开的cJSON_AddItemToObject()函数,也就明白这个函数时干什么用的了,无非就是在object这个链表的最后面加一个item结构体,且将string赋值给item->string,主要的是,这里使用的是深拷贝。
一写长了,我就担心写的不清不楚就像前面写的几篇博客一样,所以这个就到这结束了。如果有问题的话,欢迎大家留言,大家一起学习,一起搞学习。
ps: 这里增加一点的内容,因为我看了下后面的内容,发现许多都是重复的,新东西比较少,我就简单的把一些用到的其他函数一并看过,然后题目也就简单的改下吧。
我们往下翻就会看到cJSON_CreateStringArray()函数。
我们打开看看,其实是很简单的函数,如下图,一些注释写在了代码的后面。
也就是每个结点的保存值我们在上面有讲,就是调用cJSON_CreateString()函数嘛。所以很简单,后面就都是一些重复性的内容,我就不再一一解释了,在后面写总结的时候我再看看,哪些比较复杂的代码我们没有看的。差不多到此代码也就大概的看完了。花了差不多半个月的时间,刚好老板也没啥事情交代,看代码还是很爽的嘛,哈哈哈