C語言在處理JSON字符串時,有時需要將字符串進行格式化輸出,使其在多行中更易于閱讀。本文介紹如何在C語言中實現JSON字符串的換行。
#include <stdio.h>#include <stdlib.h>#include <string.h>/* 作為例子,我們定義一個JSON字符串 */
const char* jsonStr = "{\
\"name\": \"Tom\",\
\"age\": 25,\
\"address\": \"北京市朝陽區\",\
\"hobbies\": [\
\"swimming\", \"reading\", \"traveling\"\
]\
}";
/* 定義一個縮進值 */
#define INDENT_LEVEL 4
int main()
{
int len = strlen(jsonStr);
char* newStr = (char*)malloc(len * 2 * sizeof(char)); /* 分配足夠多的空間 */
int pos = 0; /* newStr的下一個可寫入的位置 */
int indent = 0; /* 當前的縮進值 */
/* 逐字符遍歷原字符串 */
for (int i = 0; i< len; i++)
{
char c = jsonStr[i]; /* 當前字符 */
if (c == '{' || c == '[') /* 左大括號/左中括號 */
{
newStr[pos++] = c; /* 暫存該字符 */
newStr[pos++] = '\n'; /* 添加換行符 */
indent += INDENT_LEVEL; /* 增加縮進 */
for (int j = 0; j< indent; j++) /* 添加縮進 */
newStr[pos++] = ' ';
}
else if (c == '}' || c == ']') /* 右大括號/右中括號 */
{
indent -= INDENT_LEVEL; /* 減少縮進 */
newStr[pos++] = '\n'; /* 添加換行符 */
for (int j = 0; j< indent; j++) /* 添加縮進 */
newStr[pos++] = ' ';
newStr[pos++] = c; /* 暫存該字符 */
}
else if (c == ',') /* 逗號 */
{
newStr[pos++] = c; /* 暫存該字符 */
newStr[pos++] = '\n'; /* 添加換行符 */
for (int j = 0; j< indent; j++) /* 添加縮進 */
newStr[pos++] = ' ';
}
else
{
/* 其他字符直接暫存 */
newStr[pos++] = c;
}
}
newStr[pos] = '\0'; /* 字符串結尾要加上'\0' */
printf("%s\n", newStr);
free(newStr); /* 釋放內存 */
return 0;
}
以上代碼通過逐字符遍歷原JSON字符串,并根據左/右括號或逗號的出現位置,邊輸出邊添加換行和縮進,最終得到格式化后的JSON字符串。通過該方法,我們可以清晰地查看JSON字符串的層級結構,方便調試和維護。
上一篇vue 訪問靜態資源
下一篇c語言封裝json