mirror of
https://github.com/nheiniger/SnaffPoint
synced 2026-06-08 16:23:31 +00:00
68 lines
2.2 KiB
C#
68 lines
2.2 KiB
C#
using System.Linq;
|
|
using System.Text;
|
|
|
|
namespace SearchQueryTool.Helpers
|
|
{
|
|
public class JsonHelper
|
|
{
|
|
private const string INDENT_STRING = " ";
|
|
|
|
public static string FormatJson(string str)
|
|
{
|
|
var indent = 0;
|
|
var quoted = false;
|
|
var sb = new StringBuilder();
|
|
for (var i = 0; i < str.Length; i++)
|
|
{
|
|
var ch = str[i];
|
|
switch (ch)
|
|
{
|
|
case '{':
|
|
case '[':
|
|
sb.Append(ch);
|
|
if (!quoted)
|
|
{
|
|
sb.AppendLine();
|
|
Enumerable.Range(0, ++indent).ForEach(item => sb.Append(INDENT_STRING));
|
|
}
|
|
break;
|
|
case '}':
|
|
case ']':
|
|
if (!quoted)
|
|
{
|
|
sb.AppendLine();
|
|
Enumerable.Range(0, --indent).ForEach(item => sb.Append(INDENT_STRING));
|
|
}
|
|
sb.Append(ch);
|
|
break;
|
|
case '"':
|
|
sb.Append(ch);
|
|
bool escaped = false;
|
|
var index = i;
|
|
while (index > 0 && str[--index] == '\\')
|
|
escaped = !escaped;
|
|
if (!escaped)
|
|
quoted = !quoted;
|
|
break;
|
|
case ',':
|
|
sb.Append(ch);
|
|
if (!quoted)
|
|
{
|
|
sb.AppendLine();
|
|
Enumerable.Range(0, indent).ForEach(item => sb.Append(INDENT_STRING));
|
|
}
|
|
break;
|
|
case ':':
|
|
sb.Append(ch);
|
|
if (!quoted)
|
|
sb.Append(" ");
|
|
break;
|
|
default:
|
|
sb.Append(ch);
|
|
break;
|
|
}
|
|
}
|
|
return sb.ToString();
|
|
}
|
|
}
|
|
} |