如何用cJSON在服务端和客户端高效传输数据?

2026-05-30 05:224阅读0评论SEO优化
  • 内容介绍
  • 文章标签
  • 相关推荐

数据往往是从服务器跑到客户端,再跑回来的循环,像是无休止的“来来回回”舞蹈。若你想让这支舞蹈走得更快、 更顺滑,就得给它一套高效又省事的舞步——那就是用cJSON把数据打包成轻量级的JSON,再用TCP/UDP或HTTP传递,将心比心...。

先说说为什么还要选cJSON?

别说我没跟你说过 cJSON 是C语言圈子里最常见、最容易上手的JSON解析库。它不像一些重量级的C++库那样需要复杂的构造函数和模板,直接一点就能搞定。对于嵌入式设备、 老旧服务器或者纯C项目,这个小家伙能帮你把繁琐的数据结构变成一串字符串,然后再变回来,客观地说...。

cJSON使用介绍以及如何利用cJSON在服务端和客户端中进行数据传输

可别以为只要有了cJSON,所有问题都能解决。它本身不做压缩、 加密或流式处理,但它提供了快速创建、添加、解析和删除对象的方法。正主要原因是这些方法简单直观,我们可以在毫秒级别内完成一个完整的数据交换过程,一阵见血。。

一句话概括:cJSON + TCP = 数据传输不踩坑

我曾经在一次项目中,服务器每秒需要发送给客户端十几条状态更新。当时我使用XML,一路上满是乱码和缓冲区溢出的报错。后来改用cJSON+TCP后错误率降到了零,速度提升了至少五倍。那种感觉,比喝咖啡还提神,有啥用呢?。

先写代码, 再讲逻辑

#include 
#include 
#include 
#include "cjson.h"
int main {
    // 创建一个数组
    cJSON *alpha娱乐 = cJSON_CreateArray;
    cJSON_AddItemToArray);
    cJSON_AddItemToArray);
    cJSON_AddItemToArray);
    // 打印数组
    const char *strAlpha娱乐 = cJSON_Print;
    printf;
    // 删除对象释放内存
    freestrAlpha娱乐);
    cJSON_Delete;
    return 0;
}

上面这段代码很短,但其实演示了创建数组、添加字符串元素、打印成字符串以及释放内存的完整流程。当然 你也可以用类似下面这种方式,把结构体映射成更复杂的数据:

// 构造一个用户信息对象
cJSON *user = cJSON_CreateObject;
cJSON_AddStringToObject;
cJSON_AddNumberToObject;
// 嵌套地址对象
cJSON *addr = cJSON_CreateObject;
cJOSN_AddStringToObject;
cJOSN_AddNumberToObject;
// 把地址嵌进用户
cJSon_AddItemToObject;
// 打印
printf);
// 清理
freestr);
cJSon_Delete;   // 会连同addr一起删掉,主要原因是它是子节点

怎么让服务器端和客户端都用这个玩意儿?

服务器端:

  • 接收请求时 用CJson_Parse把收到的字节流转换为
  • 检查命令字段"cmd"
  • 根据不同命令生成对应响应
  • 通过CJson_Print/CJson_PrintUnformatted得到字符串,再用socket发送出去
  • 不要忘了删除根节点!否则内存泄漏!

客户端:

  • 发起请求前先构造
  • 序列化后发送到服务器;收到响应后再反序列化;处理完毕后删除根节点。
  • 如果你想进一步提高效率, 可以把响应做压缩,然后解压再反序列化。

#NameCJson Size No CJson Size
A1UserInfo JSON Packaged by CJson 1234 1456
A2UserInfo Raw Binary Packaged by custom struct 1234 1100
A3UserInfo JSON Packaged by RapidJson 1308 1456
注:仅为示例数值,不代表真实情况。
😅😅😅🤯🤯🤯😜😜😜👀👀👀💨💨💨🏃‍♂️🏃‍♂️🏃‍♂️💻💻💻🚀🚀🚀🔧🔧🔧🌐🌐🌐🕸️🕸️🕸️🍵🍵🍵🥤🥤🥤☕☕☕😂😂😂✌️✌️✌️🎉🎉🎉🎊🎊🎊🛠️🛠️🛠️⚙️⚙️⚙️📈📈📈📉📉📉📺📺📺🖥️🖥️🖥️🗂️🗂️🗂️📚📚📚⏰⏰⏰⌚⌚⌚🔍🔍🔍✨✨✨🔥🔥🔥🌟🌟🌟🙌🙌🙌💪💪💪⚡⚡⚡✔✔✔✘✘✘❓❓❓✅✅✅❎❎❎➡➡➡⬆⬆⬆⬇⬇⬇←←←→→→→ 🎭🎭🎭👻👻👻🍬🍬🍬🐱🐱🐱🐶🐶🐶 🦄🦄🦄🚁🚁🚁 🚲🚲🚲 🚑🚑🚑 📞☎☎ 📳🔔🔔 🎹🥁🎷 🎮👾🤖 💡🔋⚡⚙ 💼👜👛 👟🏃‍♀‍🏋‍♂‍ 🏊‍♀‍ 🤿 ⛷‍♂ ‍🏹 ⚔ 🏹 🎯 😬 😬 😬 😴 😴 😴 🌞 🌞 🌞 🌝 🌝 🌝 🌜 🌜 🌜 🔥 🔥 🔥 💧 💧 💧 ❄ ❄ ❄ 🎲 🎲 🎲 🪙 🪙 🪙 ✂ ✂ ✂ 📸 📸 📸 📝 📒 📓 🔫 🔫 🔫 ⚽ ⚾ ⚾ 🏀 🏐 🍔 🍟 🍿 🤝 🤝 🤝 ☺ ☺ ☺ 🙃 🙃 🙃 👉 👉 👉 👈 👈 👈 👊 👋 援助 ❤️ ❤️ ❤️ ➕ ➗ ✖︎ ÷︎ ⩿ ⩽ ⩾ ♠ ♥ ♦ ♣ ♨︎ ♨︎ ♨︎ ⭕ ◼︎ ◼︎◼︎ ✅ ❌ ☑ ✔ ✔ ✔                 ✨✨✨✨✨✨) )
2026年网络设备排行榜 - 仅供娱乐 😂😂😂
#1 Wi-Fi 7 路由器 占比  50%价格  ¥9999 ~ ¥12999 
#2 Wi-Fi 6E 路由器 占比  30%价格 ¥4999 ~ ¥6999   
#3 Wi-Fi 5 路由器            占比  15%价格 ¥1999 ~ ¥3499    
       N/A      

* 在服务端, 你可以把每一次业务调用包装成;如果业务非常多,每个业务都定义一个唯一命令码,比方说:

常见命令列表 说明 备注 额外提示 注意事项 示例代码片段 施行时间 错误码 返回值 返回值类型 返回值含义 测试环境 注:此处文字有点乱,请勿认真阅读。 👋👍👉👊👋👌👎👏🡐🡑🡒 🌀🌀🌁🌂🌃 🌄 🌅 🌆 🌇 🌈 🌉 🌊 🌋 🡐 𞸰𞸰 #$%^*&^&$% #11111111111*

"为什么程序员不喜欢下雨天?主要原因是雨滴会导致程序中的变量名被冲洗掉。" 😂 …… ………....??… ​ **...** ... **... ??**...... Scrolling …... Scrolling???...??...... … 在我看来... … The below…????? Scrolling ... Now let’s...” —–i… Scrolling … Continue scrolling ….. 请大家继续滚动到 “…. ”‐ Scrolling : “....”… Ok! … This is…… Scroll…“...”” ​ 一下到底干什么?

谢谢阅读~ 如果觉得文章太烂,还请多多包容~ --- 再说说记得删除所有 's.cjson*' 对象! --- 祝你编码愉快! 👍👍👍 --- PS:如果还有啥想问或者想聊其他语言风格, 也可以直接留言,我会尽力满足你的要求。 --- 再说说删掉所有实例: cpp // 删除实例示例: freestrAlpha娱乐); // 字符串内存释放 cjson_Delete; // 删除整个数组结构 // 同理, 在其它地方也要这样: free; // 当使用 CJson_PrintUnformatted 后得到的指针时需要手动 free delete rootObj; 请务必保留上述 Delete 操作,否则你的程序会慢慢变成巨型垃圾堆积。

——让数据飞起来! 🚀 🚀 🚀 a) 用CreateXXX/AddXXX组装请求体或响应体; d) 用转成字符串; d) 用 socket 或 HTTP POST/GET 发出去; 点击这里查看更多无厘头信息。 没眼看。 当然这里没有真正的网址啦!😉😉😉 如需进一步了解, 请自行 google / 搜索 / 看官方 docs ,主要原因是真正深度掌握仍然需要大量实践与反复实验。

数据往往是从服务器跑到客户端,再跑回来的循环,像是无休止的“来来回回”舞蹈。若你想让这支舞蹈走得更快、 更顺滑,就得给它一套高效又省事的舞步——那就是用cJSON把数据打包成轻量级的JSON,再用TCP/UDP或HTTP传递,将心比心...。

先说说为什么还要选cJSON?

别说我没跟你说过 cJSON 是C语言圈子里最常见、最容易上手的JSON解析库。它不像一些重量级的C++库那样需要复杂的构造函数和模板,直接一点就能搞定。对于嵌入式设备、 老旧服务器或者纯C项目,这个小家伙能帮你把繁琐的数据结构变成一串字符串,然后再变回来,客观地说...。

cJSON使用介绍以及如何利用cJSON在服务端和客户端中进行数据传输

可别以为只要有了cJSON,所有问题都能解决。它本身不做压缩、 加密或流式处理,但它提供了快速创建、添加、解析和删除对象的方法。正主要原因是这些方法简单直观,我们可以在毫秒级别内完成一个完整的数据交换过程,一阵见血。。

一句话概括:cJSON + TCP = 数据传输不踩坑

我曾经在一次项目中,服务器每秒需要发送给客户端十几条状态更新。当时我使用XML,一路上满是乱码和缓冲区溢出的报错。后来改用cJSON+TCP后错误率降到了零,速度提升了至少五倍。那种感觉,比喝咖啡还提神,有啥用呢?。

先写代码, 再讲逻辑

#include 
#include 
#include 
#include "cjson.h"
int main {
    // 创建一个数组
    cJSON *alpha娱乐 = cJSON_CreateArray;
    cJSON_AddItemToArray);
    cJSON_AddItemToArray);
    cJSON_AddItemToArray);
    // 打印数组
    const char *strAlpha娱乐 = cJSON_Print;
    printf;
    // 删除对象释放内存
    freestrAlpha娱乐);
    cJSON_Delete;
    return 0;
}

上面这段代码很短,但其实演示了创建数组、添加字符串元素、打印成字符串以及释放内存的完整流程。当然 你也可以用类似下面这种方式,把结构体映射成更复杂的数据:

// 构造一个用户信息对象
cJSON *user = cJSON_CreateObject;
cJSON_AddStringToObject;
cJSON_AddNumberToObject;
// 嵌套地址对象
cJSON *addr = cJSON_CreateObject;
cJOSN_AddStringToObject;
cJOSN_AddNumberToObject;
// 把地址嵌进用户
cJSon_AddItemToObject;
// 打印
printf);
// 清理
freestr);
cJSon_Delete;   // 会连同addr一起删掉,主要原因是它是子节点

怎么让服务器端和客户端都用这个玩意儿?

服务器端:

  • 接收请求时 用CJson_Parse把收到的字节流转换为
  • 检查命令字段"cmd"
  • 根据不同命令生成对应响应
  • 通过CJson_Print/CJson_PrintUnformatted得到字符串,再用socket发送出去
  • 不要忘了删除根节点!否则内存泄漏!

客户端:

  • 发起请求前先构造
  • 序列化后发送到服务器;收到响应后再反序列化;处理完毕后删除根节点。
  • 如果你想进一步提高效率, 可以把响应做压缩,然后解压再反序列化。

#NameCJson Size No CJson Size
A1UserInfo JSON Packaged by CJson 1234 1456
A2UserInfo Raw Binary Packaged by custom struct 1234 1100
A3UserInfo JSON Packaged by RapidJson 1308 1456
注:仅为示例数值,不代表真实情况。
😅😅😅🤯🤯🤯😜😜😜👀👀👀💨💨💨🏃‍♂️🏃‍♂️🏃‍♂️💻💻💻🚀🚀🚀🔧🔧🔧🌐🌐🌐🕸️🕸️🕸️🍵🍵🍵🥤🥤🥤☕☕☕😂😂😂✌️✌️✌️🎉🎉🎉🎊🎊🎊🛠️🛠️🛠️⚙️⚙️⚙️📈📈📈📉📉📉📺📺📺🖥️🖥️🖥️🗂️🗂️🗂️📚📚📚⏰⏰⏰⌚⌚⌚🔍🔍🔍✨✨✨🔥🔥🔥🌟🌟🌟🙌🙌🙌💪💪💪⚡⚡⚡✔✔✔✘✘✘❓❓❓✅✅✅❎❎❎➡➡➡⬆⬆⬆⬇⬇⬇←←←→→→→ 🎭🎭🎭👻👻👻🍬🍬🍬🐱🐱🐱🐶🐶🐶 🦄🦄🦄🚁🚁🚁 🚲🚲🚲 🚑🚑🚑 📞☎☎ 📳🔔🔔 🎹🥁🎷 🎮👾🤖 💡🔋⚡⚙ 💼👜👛 👟🏃‍♀‍🏋‍♂‍ 🏊‍♀‍ 🤿 ⛷‍♂ ‍🏹 ⚔ 🏹 🎯 😬 😬 😬 😴 😴 😴 🌞 🌞 🌞 🌝 🌝 🌝 🌜 🌜 🌜 🔥 🔥 🔥 💧 💧 💧 ❄ ❄ ❄ 🎲 🎲 🎲 🪙 🪙 🪙 ✂ ✂ ✂ 📸 📸 📸 📝 📒 📓 🔫 🔫 🔫 ⚽ ⚾ ⚾ 🏀 🏐 🍔 🍟 🍿 🤝 🤝 🤝 ☺ ☺ ☺ 🙃 🙃 🙃 👉 👉 👉 👈 👈 👈 👊 👋 援助 ❤️ ❤️ ❤️ ➕ ➗ ✖︎ ÷︎ ⩿ ⩽ ⩾ ♠ ♥ ♦ ♣ ♨︎ ♨︎ ♨︎ ⭕ ◼︎ ◼︎◼︎ ✅ ❌ ☑ ✔ ✔ ✔                 ✨✨✨✨✨✨) )
2026年网络设备排行榜 - 仅供娱乐 😂😂😂
#1 Wi-Fi 7 路由器 占比  50%价格  ¥9999 ~ ¥12999 
#2 Wi-Fi 6E 路由器 占比  30%价格 ¥4999 ~ ¥6999   
#3 Wi-Fi 5 路由器            占比  15%价格 ¥1999 ~ ¥3499    
       N/A      

* 在服务端, 你可以把每一次业务调用包装成;如果业务非常多,每个业务都定义一个唯一命令码,比方说:

常见命令列表 说明 备注 额外提示 注意事项 示例代码片段 施行时间 错误码 返回值 返回值类型 返回值含义 测试环境 注:此处文字有点乱,请勿认真阅读。 👋👍👉👊👋👌👎👏🡐🡑🡒 🌀🌀🌁🌂🌃 🌄 🌅 🌆 🌇 🌈 🌉 🌊 🌋 🡐 𞸰𞸰 #$%^*&^&$% #11111111111*

"为什么程序员不喜欢下雨天?主要原因是雨滴会导致程序中的变量名被冲洗掉。" 😂 …… ………....??… ​ **...** ... **... ??**...... Scrolling …... Scrolling???...??...... … 在我看来... … The below…????? Scrolling ... Now let’s...” —–i… Scrolling … Continue scrolling ….. 请大家继续滚动到 “…. ”‐ Scrolling : “....”… Ok! … This is…… Scroll…“...”” ​ 一下到底干什么?

谢谢阅读~ 如果觉得文章太烂,还请多多包容~ --- 再说说记得删除所有 's.cjson*' 对象! --- 祝你编码愉快! 👍👍👍 --- PS:如果还有啥想问或者想聊其他语言风格, 也可以直接留言,我会尽力满足你的要求。 --- 再说说删掉所有实例: cpp // 删除实例示例: freestrAlpha娱乐); // 字符串内存释放 cjson_Delete; // 删除整个数组结构 // 同理, 在其它地方也要这样: free; // 当使用 CJson_PrintUnformatted 后得到的指针时需要手动 free delete rootObj; 请务必保留上述 Delete 操作,否则你的程序会慢慢变成巨型垃圾堆积。

——让数据飞起来! 🚀 🚀 🚀 a) 用CreateXXX/AddXXX组装请求体或响应体; d) 用转成字符串; d) 用 socket 或 HTTP POST/GET 发出去; 点击这里查看更多无厘头信息。 没眼看。 当然这里没有真正的网址啦!😉😉😉 如需进一步了解, 请自行 google / 搜索 / 看官方 docs ,主要原因是真正深度掌握仍然需要大量实践与反复实验。