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;
}

posted @ 2021-01-12 17:44  叫夏洛啊  阅读(1423)  评论(1编辑  收藏  举报