将以下压缩的 json 字符串格式化:
[{"date":"2016-05-02","name":"王小虎","address":"上海市普陀区金沙江路 1518 弄"},{"date":"2016-05-03","name":"王小虎","address":"上海市普陀区金沙江路 1519 弄"},{"date":"2016-05-04","name":"王小虎","address":"上海市普陀区金沙江路 1520 弄"},{"date":"2016-05-05","name":"王小虎","address":"上海市普陀区金沙江路 1521 弄"}]
最简单的就是引用 Newtonsoft.Json 可以设置格式化的,只需要一句话即可。
在 项目 --> 管理 NuGet 程序包中,搜索 json 安装即可。
JsonTextWriter jsonWriter = new JsonTextWriter(textWriter)
{
Formatting = Formatting.Indented,//格式化缩进
Indentation = 4, //缩进四个字符
IndentChar = ‘ ‘ //缩进的字符是空格
};
但是这样有一点不好就是 : 我只是想格式化一下 json 字符串这个功能,不想使用几百k的dll文件。那就使用下面的方法:
// 将序列化之后的 json 字符串进行格式化
public static string JsonFormat(string json)
{
int level = 0;
var jsonArr = json.ToArray();
StringBuilder jsonStr = new StringBuilder();
string _nt = "\r\n";
for (int i = 0; i < json.Length; i++)
{
char c = jsonArr[i];
if (level > 0 && ‘\n‘ == jsonStr.ToString().ToArray()[jsonStr.Length - 1])
{
jsonStr.Append(TreeLevel(level));
}
switch (c)
{
case ‘[‘:
jsonStr.Append(c + _nt);
level++;
break;
case ‘,‘:
jsonStr.Append(c + _nt);
break;
case ‘:‘:
jsonStr.Append(c + " ");
break;
case ‘]‘:
level--;
jsonStr.Append(_nt);
jsonStr.Append(TreeLevel(level));
jsonStr.Append(c);
break;
case ‘{‘:
jsonStr.Append(c + _nt);
level++;
break;
case ‘}‘:
level--;
jsonStr.Append(_nt);
jsonStr.Append(TreeLevel(level));
jsonStr.Append(c);
break;
default:
jsonStr.Append(c);
break;
}
}
return jsonStr.ToString();
}
// 设置缩进
private static string TreeLevel(int level)
{
string leaf = string.Empty;
for (int t = 0; t < level; t++)
{
leaf += " ";
}
return leaf;
}