Here’s some code I rehashed from some Google findings to pretty print JSON. Helps me with debugging and has worked pretty decently so far.
Consider it beerware licensed.
void beautifyJSON (String& source, int numSpaces)
{
String result;
auto cp = source.getCharPointer();
const auto whitespace = String::repeatedString (" ", jlimit (0, 8, numSpaces));
int level = 0;
bool ignoreNext = false;
bool inputString = false;
auto appendWhitespace = [&]()
{
for (int i = level; --i >= 0;)
result << whitespace;
};
auto c = cp.getAndAdvance();
while (c != 0)
{
switch (c)
{
case 0:
case '\r':
case '\n':
break;
case '[':
case '{':
if (inputString)
{
result << c;
break;
}
++level;
result << c << newLine;
appendWhitespace();
break;
case ']':
case '}':
if (inputString)
{
result << c;
break;
}
if (level != 0)
--level;
result << newLine;
appendWhitespace();
result << c;
break;
case ',':
if (inputString)
{
result << ",";
break;
}
result << "," << newLine;
appendWhitespace();
break;
case '\\':
ignoreNext = ! ignoreNext;
result << "\\";
break;
case '"':
if (! ignoreNext)
inputString = ! inputString;
result << "\"";
break;
case ' ':
if (inputString)
result << " ";
break;
case ':':
result << ":";
if (! inputString)
result << " ";
break;
default:
ignoreNext = false;
result << c;
break;
}
c = cp.getAndAdvance();
}
source = result.trim();
}