Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Fixed it... somewhat.</p> <pre><code>public class JsonFormatter { #region class members const string Space = " "; const int DefaultIndent = 0; const string Indent = Space + Space + Space + Space; static readonly string NewLine = Environment.NewLine; #endregion private enum JsonContextType { Object, Array } static void BuildIndents(int indents, StringBuilder output) { indents += DefaultIndent; for (; indents &gt; 0; indents--) output.Append(Indent); } bool inDoubleString = false; bool inSingleString = false; bool inVariableAssignment = false; char prevChar = '\0'; Stack&lt;JsonContextType&gt; context = new Stack&lt;JsonContextType&gt;(); bool InString() { return inDoubleString || inSingleString; } public string PrettyPrint(string input) { var output = new StringBuilder(input.Length * 2); char c; for (int i = 0; i &lt; input.Length; i++) { c = input[i]; switch (c) { case '{': if (!InString()) { if (inVariableAssignment || (context.Count &gt; 0 &amp;&amp; context.Peek() != JsonContextType.Array)) { output.Append(NewLine); BuildIndents(context.Count, output); } output.Append(c); context.Push(JsonContextType.Object); output.Append(NewLine); BuildIndents(context.Count, output); } else output.Append(c); break; case '}': if (!InString()) { output.Append(NewLine); context.Pop(); BuildIndents(context.Count, output); output.Append(c); } else output.Append(c); break; case '[': output.Append(c); if (!InString()) context.Push(JsonContextType.Array); break; case ']': if (!InString()) { output.Append(c); context.Pop(); } else output.Append(c); break; case '=': output.Append(c); break; case ',': output.Append(c); if (!InString() &amp;&amp; context.Peek() != JsonContextType.Array) { BuildIndents(context.Count, output); output.Append(NewLine); BuildIndents(context.Count, output); inVariableAssignment = false; } break; case '\'': if (!inDoubleString &amp;&amp; prevChar != '\\') inSingleString = !inSingleString; output.Append(c); break; case ':': if (!InString()) { inVariableAssignment = true; output.Append(Space); output.Append(c); output.Append(Space); } else output.Append(c); break; case '"': if (!inSingleString &amp;&amp; prevChar != '\\') inDoubleString = !inDoubleString; output.Append(c); break; case ' ': if (InString()) output.Append(c); break; default: output.Append(c); break; } prevChar = c; } return output.ToString(); } } </code></pre> <p><del><a href="http://weblog.cynosura.eu/post/2010/03/06/Json-Pretty-Printer.aspx" rel="nofollow">credit</a></del> [dead link]</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload