C#中的JSON格式化程序?

寻找一个将stringJson作为输入的函数,并使用换行符和缩进对其进行格式化。验证将是一个奖励,但不是必需的,而且我不需要将其解析为对象或其他任何东西。

有人知道这样的图书馆吗?


输入样例:

{"status":"OK", "results":[ {"types":[ "locality", "political"], "formatted_address":"New York, NY, USA", "address_components":[ {"long_name":"New York", "short_name":"New York", "types":[ "locality", "political"]}, {"long_name":"New York", "short_name":"New York", "types":[ "administrative_area_level_2", "political"]}, {"long_name":"New York", "short_name":"NY", "types":[ "administrative_area_level_1", "political"]}, {"long_name":"United States", "short_name":"US", "types":[ "country", "political"]}], "geometry":{"location":{"lat":40.7143528, "lng":-74.0059731}, "location_type":"APPROXIMATE", "viewport":{"southwest":{"lat":40.5788964, "lng":-74.2620919}, "northeast":{"lat":40.8495342, "lng":-73.7498543}}, "bounds":{"southwest":{"lat":40.4773990, "lng":-74.2590900}, "northeast":{"lat":40.9175770, "lng":-73.7002720}}}}]}

回答:

我更新了旧版本,现在它应该支持未引用的值,例如整数和布尔值。

我重构了以前的版本并得到了最终版本:代码更短,更清晰。只需要一种扩展方法。最重要的是:修复了一些错误。

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();

}

}

static class Extensions

{

public static void ForEach<T>(this IEnumerable<T> ie, Action<T> action)

{

foreach (var i in ie)

{

action(i);

}

}

}

以上是 C#中的JSON格式化程序? 的全部内容, 来源链接: utcz.com/qa/418983.html

回到顶部