【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格式数据解析后,判断配置信息是否是新数据或者是否更新.如是新数据,则直接添加到数据库:若是数据更新,则更新数据库配置信息并更新运行状态信息:都 ...
随机推荐
- OOP复习笔记
/*OOP相关的代名词不做讲解*/ OOP的三大特征: 封装 - 继承 - 多态 -----------------------------------目录---------------------- ...
- nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器[转]
转 :http://redstarofsleep.iteye.com/blog/2123752 Nginx本身是一个非常出色的HTTP服务器,FFMPEG是非常好的音视频解决方案.这两个东西通过一个n ...
- echarts之字符云tooltip显示混乱问题的解决办法
echarts字符云中tooltip显示混乱主要表现为一下两点: 1.字体与其显示框内容不对应鼠标识别错误 解决思路: 就是option里的数据要对value降序排序(这一点很关键,是必须的一步) 把 ...
- 40 网络相关函数(八)——live555源码阅读(四)网络
40 网络相关函数(八)——live555源码阅读(四)网络 40 网络相关函数(八)——live555源码阅读(四)网络 简介 15)writeSocket向套接口写数据 TTL的概念 函数send ...
- flask 链接 url_for()
通常html的文件都放在template里面,那么静态的文件放在哪呢?staitc里面 调用 url_for('static', filename='css/styles.css', _externa ...
- symfony2 环境搭建笔记
本机环境:windows+xampp symfony下载:官网下载 环境配置: 1.下载后将symfony文件夹解压到xampp/htdocs中(最好改一下文件夹名,尽量小写) 2.Symfony2自 ...
- ccf559c
题意:给出一个矩阵棋盘,大小不超过10^5.上面有n个非法点(n<=2000)不可以踩,从左上角开始走到右下角,每次只能向下或者向右移动.问有多少种走法.结果对10^9+7取模. 分析: 组合数 ...
- uml 推荐文章
http://blog.csdn.net/zfrong/article/details/4086424 http://www.cnblogs.com/ywqu/archive/2009/12/14/1 ...
- Androd核心基础01
Androd核心基础01包含的主要内容如下 Android版本简介 Android体系结构 JVM和DVM的区别 常见adb命令操作 Android工程目录结构 点击事件的四种形式 电话拨号器Demo ...
- jsp通过s:hidden传值给后台,后台数据出现了若干逗号问题
<s:iterator value="rpActionVO.page.result" id="list" status="st"> ...