C语言用CSON处理JSON时,把结构体玩成了“反射”。先从传统做法说起,过去是用cJSON手动比对每个字段,代码又多又难维护。有没有更好的办法?答案就是给自己的结构体写个数据模型,其实这就是一种简化版的“反射”思想。咱们可以提前把结构体每个成员的类型、名字和在内存中的位置都记下来,这张地图就是CsonModel。它记录了结构体到JSON的双向坐标。比如定义一个结构体Person,先准备好CsonModel数组。这个数组的顺序得跟结构体字段顺序一致,最后用CsonType_end做标记。序列化时,根据模型数组里的偏移量直接拿值生成JSON字符串;反序列化时,用key在模型里找对应的位置,把值写进目标内存。 Alice给大家做个反序列化的示例:把JSON字符串里的age和name的值取出来赋给Person结构体里的age和name字段,完全不用手动写赋值语句。Bob再做个序列化的例子:把Person结构体的age和name字段的值转成JSON字符串,内存自动管理好。 这样一来,代码写起来清爽多了。解析的时候不用一个键一个键地比对,直接根据模型去找位置;反序列化也不用一个个字段赋值。下次再遇到JSON处理任务的时候,不妨先给自己的结构体写一张“数据模型”。用CSON配合cJSON的底层能力,在嵌入式和网络通信场景下就能实现零冗余键比对、零手动赋值。开发者只需要关心数据结构本身,就能享受到“对象映射”的快感。这或许就是让C语言写起来更爽的那一把钥匙。