C JSON 是一種輕型的數(shù)據(jù)交換格式,具有良好的可讀性和可擴(kuò)展性,常用于網(wǎng)絡(luò)傳輸和數(shù)據(jù)存儲(chǔ)。在 C 語(yǔ)言中,有很多優(yōu)秀的庫(kù)可以用來(lái)解析和生成 JSON 數(shù)據(jù),其中最為流行和方便的庫(kù)之一就是 cJSON。
cJSON 是一個(gè)輕量級(jí)的、高效的、靈活的 JSON 解析庫(kù),可用于 C 和 C++ 應(yīng)用程序。它具有占用空間小、運(yùn)行速度快、易于使用等特點(diǎn),是 C 語(yǔ)言處理 JSON 數(shù)據(jù)的理想選擇。
在 cJSON 中,格式化輸出 JSON 數(shù)據(jù)非常方便,只需要調(diào)用 cJSON_Print 函數(shù)即可。該函數(shù)可以將一個(gè) cJSON 對(duì)象序列化成 JSON 格式的字符串,并自動(dòng)添加換行符和縮進(jìn)符進(jìn)行格式化輸出。例如:
cJSON *root = cJSON_CreateObject(); cJSON_AddStringToObject(root, "name", "Tom"); cJSON_AddNumberToObject(root, "age", 20); cJSON_AddStringToObject(root, "school", "Tsinghua University"); char *jsonStr = cJSON_Print(root); printf("%s\n", jsonStr);
輸出結(jié)果如下:
{ "name": "Tom", "age": 20, "school": "Tsinghua University" }
可以看到,輸出的 JSON 數(shù)據(jù)已經(jīng)自動(dòng)添加了換行符和縮進(jìn)符,符合了通用的 JSON 格式化要求。如果需要自定義換行符和縮進(jìn)符,可以使用 cJSON_PrintBuffered 函數(shù),該函數(shù)可以指定縮進(jìn)符和換行符,并返回 JSON 格式數(shù)據(jù)的長(zhǎng)度。
cJSON *root = cJSON_CreateObject(); cJSON_AddStringToObject(root, "name", "Tom"); cJSON_AddNumberToObject(root, "age", 20); cJSON_AddStringToObject(root, "school", "Tsinghua University"); char *buf = calloc(1, 1024); int len = cJSON_PrintBuffered(root, buf, 1024, 4); printf("%.*s\n", len, buf);
輸出結(jié)果如下:
{ "name": "Tom", "age": 20, "school": "Tsinghua University" }
在使用 cJSON 進(jìn)行 JSON 數(shù)據(jù)格式化時(shí),需要注意以下幾點(diǎn):
- 使用 cJSON_Print 函數(shù)或 cJSON_PrintBuffered 函數(shù)進(jìn)行輸出前,確保 cJSON 對(duì)象已經(jīng)成功創(chuàng)建且包含正確的數(shù)據(jù)。
- 如果需要自定義換行符和縮進(jìn)符,應(yīng)該在 cJSON_PrintBuffered 函數(shù)中指定。
- 在輸出 JSON 數(shù)據(jù)時(shí),建議使用 printf 函數(shù)進(jìn)行輸出,而不是 puts 函數(shù),因?yàn)楹笳邥?huì)自動(dòng)在字符串末尾添加換行符,可能會(huì)影響數(shù)據(jù)格式化效果。