C# 格式化 json 字串
阿新 • • 發佈:2021-01-12
將以下壓縮的 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; }