【C#】Json数据 排版算法
我从服务器上取得一串Json数据,然后想表示到画面上。不过服务器上取下的Json数据肯定是经过压缩的,空格和换行都没有。如果直接看,可读性非常差。
由于我这个软件是内部管理用的,使用者既能直接看懂Json数据,但是又要保证数据的可读性,所以得将Json数据做一个排版。
具体如下:
public static string PraseToJson(string str)
{
var tabIndex = ;
for (int i = ; i < str.Length; i++)
{
var cr = str[i]; if (cr == '{' || cr == '[')
{
var prestr = str.Substring(, i);
var strsuff = str.Substring(i + , str.Length - i - );
str = prestr + cr + "\n" + getSpace(tabIndex + ) + strsuff; i += ( + * (tabIndex + ));
tabIndex++;
}
else if (cr == '}' || cr == ']')
{
var prestr = str.Substring(, i);
var strsuff = str.Substring(i + , str.Length - i - );
str = prestr + "\n" + getSpace(tabIndex-) + cr + strsuff; i += ( + * (tabIndex-) );
tabIndex--; }
else if(cr == ',')
{
var prestr = str.Substring(, i+);
var strsuff = str.Substring(i + , str.Length - i - );
str = prestr + "\n" + getSpace(tabIndex) + strsuff;
i += ( + * tabIndex);
}
} return str.Trim();
} private static string getSpace(int num)
{
string result = string.Empty;
for (int i = ; i < num; i++)
{
result += " ";
} return result;
}
具体的算法就是,如果是‘{’或者‘[’开头的时候,在‘{’或者‘[’的后面换行,并且空开相应的格数。
如果是‘}’或‘]’开头的时候,在‘}’或‘]’的前面换行,并空开相应的格数。
这个相应的格数怎么计算呢?就是用一个变量控制,上面代码中用的是tabIndex,如果是‘{’或者‘[’,就+1,如果是‘}’或‘]’,就-1.然后换成相应的半角空格。
嗯,说起来还是挺简单的。其实这鬼东西好麻烦,我花了大概两个多小时才写出来,并且只是粗粗测试了一下,有一些情况不一定能cover的住。我算法上一向很差劲。
做出来后效果如下:

【C#】Json数据 排版算法的更多相关文章
- python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
1. 场景描述 一直做java,因项目原因,需要封装一些经典的算法到平台上去,就一边学习python,一边网上寻找经典算法代码,今天介绍下经典的K-means聚类算法,算法原理就不介绍了,只从代码层面 ...
- fastjson生成和解析json数据,序列化和反序列化数据
本文讲解2点: 1. fastjson生成和解析json数据 (举例:4种常用类型:JavaBean,List<JavaBean>,List<String>,List<M ...
- fastjson生成和解析json数据
本文讲解2点: 1. fastjson生成和解析json数据 (举例:4种常用类型:JavaBean,List<JavaBean>,List<String>,List<M ...
- 用JAVA给JSON进行排版
之前听到朋友的面试题,是如何对JSON进行排版,于是就写了一个Demo,觉得挺有意思的,就贴出来了. 这个就是记录缩进来输出,大家也可以尝试一下其他更好算法来进行输出. 功能:可以把一行的JSON字符 ...
- 如何使用Google APIs和Google应用系统集成(7)----在里面JSON兑换XML数据处理,JSON数据包括违规XML数据规范:XML节点名称不支持号码Java解
笔者电话Google Calendar APIs的GetColors方法,其中(有关详细信息Google Calendar API已经Google API看到我的博文介绍的其余部分,目前,我们只取Go ...
- 菜鸟笔记:node.js+mysql中将JSON数据构建为树(递归制作树状菜单数据接口)
初学Web端开发,今天是第一次将所学做随笔记录,肯定存在多处欠妥,望大家海涵:若有不足,望大家批评指正. 进实验室后分配到的第一个项目,需要制作一个不确定层级树形菜单的数据接口,对于从来没实战编过程的 ...
- 基于PySpark的网络服务异常检测系统 (四) Mysql与SparkSQL对接同步数据 kmeans算法计算预测异常
基于Django Restframework和Spark的异常检测系统,数据库为MySQL.Redis, 消息队列为Celery,分析服务为Spark SQL和Spark Mllib,使用kmeans ...
- json数据映射填充到html元素显示
映射算法做了改进,支持name重复映射 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&quo ...
- MVC框架json数据展示程序(第一版)
模型原型:服务器的配置和运行状态信息. 设计要求:Json格式数据解析后,判断配置信息是否是新数据或者是否更新.如是新数据,则直接添加到数据库:若是数据更新,则更新数据库配置信息并更新运行状态信息:都 ...
随机推荐
- [codevs2070]爱情之路
[codevs2070]爱情之路 试题描述 yh非常想念他的女朋友小y,于是他决定前往小y所在的那块大陆. 小y所在的大陆共有n个城市,m条双向路,每条路连接一个或两个城市.经过一条路ei需要耗费时间 ...
- BZOJ 1468: Tree
Description 真·树,问距离不大于 \(k\) 的点对个数. Sol 点分治. 同上. Code /********************************************* ...
- Windows 2008R2关闭网络发现
在Windows Server 2008 R2安装完后,默认情况下,在高级共享设置中无法对网络发现的更改进行保存(每次选择"启用网络发现"后保存修改,但重新打开"高级共享 ...
- 一个完整的Http请求
一个完整的http请求,通常有以下7点: 1.建立tcp连接 2.web浏览器web服务器发送请求命令 3.web浏览器发送请求头信息 4.web服务器应答 5.web服务器发送应答信息 6.web服 ...
- python thread的join方法解释
python的Thread类中提供了join()方法,使得一个线程可以等待另一个线程执行结束后再继续运行.这个方法还可以设定一个timeout参数,避免无休止的等待.因为两个线程顺序完成,看起来象一个 ...
- 【Kubernetes】两篇文章 搞懂 K8s 的 fannel 网络原理
近期公司的flannel网络很不稳定,花时间研究了下并且保证云端自动部署的网络能够正常work. 1.网络拓扑 拓扑如下:(点开看大图) 容器网卡通过docker0桥接到flannel0网卡,而每个 ...
- SharePoint更改密码
stsadm –o updatefarmcredentials –userlogin DomainName\UserName -password NewPassword –local 1. 通过管理 ...
- hdu 5442 (ACM-ICPC2015长春网络赛F题)
题意:给出一个字符串,长度是2*10^4.将它首尾相接形成环,并在环上找一个起始点顺时针或逆时针走一圈,求字典序最大的走法,如果有多个答案则找起始点最小的,若起始点也相同则选择顺时针. 分析:后缀数组 ...
- Delphi中限制文本框(TEdit)只能输入数字
procedure Tform1.Edit1KeyPress(Sender: TObject; var Key: Char);var edt: TEdit; str, strL, strR: stri ...
- Java数组的复制Arrays.copyOf()、System.arraycopy()、nums.clone()
public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length); a ...