在使用 C 語言進行 JSON 解析/生成的過程中,有時需要將 JSON 對象轉換為字符串格式進行保存或網絡傳輸。但是,有些情況下我們可能會發現轉換出來的 JSON 字符串中存在換行符,這就會導致后續處理出現問題。下面我們來看一些可能導致換行符出現的代碼:
// 準備 JSON 對象 cJSON* root = cJSON_CreateObject(); cJSON_AddStringToObject(root, "name", "Tom"); cJSON_AddNumberToObject(root, "age", 25); // JSON 轉字符串,不帶縮進 char* str = cJSON_PrintUnformatted(root); printf("Unformatted string: \n%s\n", str); // JSON 轉字符串,帶縮進 char* str = cJSON_Print(root); printf("Formatted string: \n%s\n", str);
上述代碼中,我們使用了 cJSON 庫來構建 JSON 對象,并調用了 cJSON_PrintUnformatted() 和 cJSON_Print() 函數將 JSON 轉換為字符串格式。其中,cJSON_PrintUnformatted() 函數不帶縮進,cJSON_Print() 函數則會在輸出的字符串中使用縮進符號(通常是空格或制表符)。
然而,注意到上述輸出中均存在換行符。造成這種情況的原因在于,cJSON_PrintUnformatted() 和 cJSON_Print() 函數在每行結尾處都會添加一個換行符。那么如果我們想要去掉這些換行符呢?可以借助下面這個函數:
void remove_newline(char* str) { for (int i = 0; str[i] != '\0'; i++) { if (str[i] == '\n') { str[i] = ' '; } } }
這個函數很簡單,就是遍歷字符串,如果發現一個換行符就將其替換為空格。使用方法也很簡單,只需要在 cJSON_PrintUnformatted() 或 cJSON_Print() 的返回值上調用這個函數即可:
char* str = cJSON_PrintUnformatted(root); remove_newline(str); printf("Unformatted string: \n%s\n", str);
現在輸出的字符串中就沒有換行符了。這個方法同樣適用于 cJSON_Print() 函數。