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_Print | cJSON_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 结构简单,两者的输出差异可能不明显,但对于复杂嵌套结构,格式化版本会更易读