zoukankan      html  css  js  c++  java
  • 【C#】Json数据 排版算法

    我从服务器上取得一串Json数据,然后想表示到画面上。不过服务器上取下的Json数据肯定是经过压缩的,空格和换行都没有。如果直接看,可读性非常差。

    由于我这个软件是内部管理用的,使用者既能直接看懂Json数据,但是又要保证数据的可读性,所以得将Json数据做一个排版。

    具体如下:

    public static string PraseToJson(string str)
    {
        var tabIndex = 0;
        for (int i = 0; i < str.Length; i++)
        {
            var cr = str[i];
    
            if (cr == '{' || cr == '[')
            {
                var prestr = str.Substring(0, i);
                var strsuff = str.Substring(i + 1, str.Length - i - 1);
                str = prestr + cr + "
    " + getSpace(tabIndex + 1) + strsuff;
               
                i += (1 + 2 * (tabIndex + 1));
                tabIndex++;
            }
            else if (cr == '}' || cr == ']')
            {
                var prestr = str.Substring(0, i);
                var strsuff = str.Substring(i + 1, str.Length - i - 1);
                str = prestr + "
    " + getSpace(tabIndex-1) + cr + strsuff;
                
                i += (1 + 2 * (tabIndex-1) );
                tabIndex--;
              
            }
            else if(cr == ',')
            {
                var prestr = str.Substring(0, i+1);
                var strsuff = str.Substring(i + 1, str.Length - i - 1);
                str = prestr + "
    " + getSpace(tabIndex) + strsuff;
                i += (1 + 2 * tabIndex);
            }
        }
    
        return str.Trim();
    }
    
    private static string getSpace(int num) 
    {
        string result = string.Empty;
        for (int i = 0; i < num; i++)
        {
            result += "  ";
        }
    
        return result;
    }

    具体的算法就是,如果是‘{’或者‘[’开头的时候,在‘{’或者‘[’的后面换行,并且空开相应的格数。

    如果是‘}’或‘]’开头的时候,在‘}’或‘]’的前面换行,并空开相应的格数。

    这个相应的格数怎么计算呢?就是用一个变量控制,上面代码中用的是tabIndex,如果是‘{’或者‘[’,就+1,如果是‘}’或‘]’,就-1.然后换成相应的半角空格。

    嗯,说起来还是挺简单的。其实这鬼东西好麻烦,我花了大概两个多小时才写出来,并且只是粗粗测试了一下,有一些情况不一定能cover的住。我算法上一向很差劲。

     做出来后效果如下:

  • 相关阅读:
    java URL、HTTP与HTML+CSS
    JDK的图文安装教程
    Java之Tomcat、Dynamic web project与Servlet
    Java基础ArrayList、Servlet与Filter
    JavaMath方法、服务器与Tomcat安装与配置步骤
    关于navicat 系列软件一点击菜单栏就闪退
    Java基础之MySQL数据库与JDBC
    Java中的常用方法
    Java基础之Calendar类、JNDI之XML
    JAVAWEB基础模块开发顺序与数据访问对象实现类步骤
  • 原文地址:https://www.cnblogs.com/nonkicat/p/3372782.html
Copyright © 2011-2022 走看看