头文件定义:
class CFormat
{
public:
virtual int format(CString input, CString& output) = 0;
};
#define TAB_SPACE " "
#define NEW_LINE "\r\n"
函数实现代码:
int CFormatJson::format(CString input, CString& output) {
std::string result = "";
std::string inputData;
int level = 0;
inputData = CT2A(input.GetString());
for (std::string::size_type index = 0; index < inputData.size(); index++)
{
char c = inputData[index];
if (level > 0 && '\r\n' == inputData[inputData.size() - 1])
{
result += getLevelStr(level);
}
switch (c)
{
case '{':
case '[':
result = result + c + NEW_LINE;
level++;
result += getLevelStr(level);
break;
case ',':
result = result + c;
// 判断是否是inputData的逗号
if ((inputData[index - 1] == '"') || (inputData[index + 1] == '"')) {
result = result + NEW_LINE;
result += getLevelStr(level);
}
break;
case '}':
case ']':
result += NEW_LINE;
level--;
result += getLevelStr(level);
result += c;
break;
default:
// 回车键
if (c == '\r') {
}
else {
result += c;
}
break;
}
}
// 输出
output = result.c_str();
return 1;
}
std::string CFormatJson::getLevelStr(int level)
{
std::string levelStr = "";
for (int i = 0; i < level; i++)
{
levelStr += TAB_SPACE;
}
return levelStr;
}