当前位置: 首页 > ds >正文

cJSON_Print 和 cJSON_PrintUnformatted的区别

cJSON_Print 和 cJSON_PrintUnformatted 是 cJSON 库中用于将 cJSON 对象转换为 JSON 字符串的两个函数,它们的区别主要在于输出的格式:

1. cJSON_Print

  • 功能:将 cJSON 对象转换为格式化的 JSON 字符串。

  • 特点

    • 输出的 JSON 字符串是格式化的(pretty-printed),包含换行符(\n)、缩进(空格或制表符)等,使其更易读。

    • 适合调试或需要人类可读的场景。

  • 示例输出

    {"name": "Alice","age": 25,"city": "New York"
    }

2. cJSON_PrintUnformatted

  • 功能:将 cJSON 对象转换为紧凑的、未格式化的 JSON 字符串。

  • 特点

    • 输出的 JSON 字符串是紧凑的,没有多余的空白字符(如换行、缩进等)。

    • 适合网络传输或存储,因为它的体积更小。

  • 示例输出

    {"name":"Alice","age":25,"city":"New York"}

主要区别总结

特性cJSON_PrintcJSON_PrintUnformatted
输出格式格式化(易读)紧凑(无空格/换行)
适用场景调试、日志网络传输、存储
字符串大小较大(含格式字符)较小(无冗余字符)

代码示例

#include <stdio.h>
#include <cjson/cJSON.h>int main() {cJSON *root = cJSON_CreateObject();cJSON_AddStringToObject(root, "name", "Alice");cJSON_AddNumberToObject(root, "age", 25);cJSON_AddStringToObject(root, "city", "New York");// 格式化输出char *formatted = cJSON_Print(root);printf("Formatted:\n%s\n", formatted);cJSON_free(formatted);// 未格式化输出char *unformatted = cJSON_PrintUnformatted(root);printf("Unformatted:\n%s\n", unformatted);cJSON_free(unformatted);cJSON_Delete(root);return 0;
}

注意事项

  • 两者返回的字符串都需要手动释放(通过 cJSON_free),避免内存泄漏。

  • 如果 JSON 结构简单,两者的输出差异可能不明显,但对于复杂嵌套结构,格式化版本会更易读

http://www.xdnf.cn/news/469.html

相关文章:

  • MinnowBoard MAX单板UEFI BIOS代码编译教程
  • 使用AOP完成添加日志
  • 【AI提示词】IT专家顾问
  • 文件上传及验证绕过漏洞
  • Delphi 常用关键字收录
  • 基础智能体的进展与挑战第 6 章【情绪建模】
  • Python遥感开发之Hurst指数的实现
  • Zookeeper的典型应用场景?
  • Keil MDK中禁用半主机(No Semihosting)
  • 齐次坐标变换+Unity矩阵变换
  • 【Tauri2】026——Tauri+Webassembly
  • 代谢组数据分析(二十四):基于tidymass包从质谱原始数据到代谢物注释结果的实践指南
  • vue3 watch和watchEffect 的用法和区别
  • 计算机视觉算法实现——智能座椅坐姿识别
  • 基于GRPO将QWEN训练为和deepseek一样的推理模型!
  • linux kernel irq相关函数详解
  • 国产的 Java Solon v3.2.0 发布(央企信创的优选)
  • Day10【基于encoder- decoder架构实现新闻文本摘要的提取】
  • 第3章 垃圾收集器与内存分配策略《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》
  • 从0开发一个unibest+vue3项目,使用vscode编辑器开发,总结vue2升vue3项目开始,小白前期遇到的问题
  • Flask应用部署通用指南
  • [Windows] Wireshark 网络抓包工具 v4.4.6
  • 【MATLAB海洋专题】历史汇总
  • C++学习之路,从0到精通的征途:vector类的模拟实现
  • 算法期末复习
  • 基于Fabric.js的选座布局系统开发笔记
  • 如何系统地入门学习stm32?
  • Linux419 三次握手四次挥手抓包 wireshark
  • python程序的流程
  • 移动自动化测试-appium