1. 程式人生 > 實用技巧 >C# 格式化 json 字串

C# 格式化 json 字串

將以下壓縮的 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;
    }