用JAVA给JSON进行排版
功能:可以把一行的JSON字符串格式化后进行输出,带有缩进,看起来更加直观。
支持JSON格式的字符串和文件格式化输出。
package json;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import vote.Vote;
/**
* JSON打印器
* @author jiujie
* @version $Id: JSONPrinter.java, v 0.1 2016年7月28日 下午5:08:41 jiujie Exp $
*/
public class JSONPrinter {
private Object jsonObj;
/**
* JSON文件打印器
* constructor
* @author jiujie
* 2016年7月28日 下午5:08:59
* @param jsonFile
*/
public JSONPrinter(File jsonFile) {
this.jsonObj = jsonFile;
}
/**
* JSON字符串打印器
* constructor
* @author jiujie
* 2016年7月28日 下午5:08:59
* @param jsonString
*/
public JSONPrinter(String jsonString) {
this.jsonObj = jsonString;
}
public void print() {
if (jsonObj instanceof File) {
try {
print(new FileInputStream((File) jsonObj));
} catch (Exception e) {
e.printStackTrace();
}
} else if (jsonObj instanceof String) {
try {
print(new ByteArrayInputStream(((String) jsonObj).getBytes()));
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void print(InputStream inputStream) throws IOException {
InputStreamReader in = new InputStreamReader(inputStream);
int read = 0;
int indent = 0;
while ((read = in.read()) > 0) {
char ch = (char) read;
switch (ch) {
case '{': {
indent = printAndRightMove(indent, ch);
break;
}
case '}': {
indent = printAndLeftMove(indent, ch);
break;
}
case '[': {
indent = printAndRightMove(indent, ch);
break;
}
case ']': {
indent = printAndLeftMove(indent, ch);
break;
}
case ',': {
System.out.println(ch);
System.out.print(getBlankString(indent));
break;
}
default: {
System.out.print(ch);
break;
}
}
}
in.close();
}
private int printAndLeftMove(int indent, char ch) {
System.out.println();
indent -= 2;
System.out.print(getBlankString(indent) + ch);
return indent;
}
private int printAndRightMove(int indent, char ch) {
System.out.println();
System.out.println(getBlankString(indent) + ch);
indent += 2;
System.out.print(getBlankString(indent));
return indent;
}
private String getBlankString(int length) {
if (length <= 0) {
return "";
}
String blankString = "";
for (int i = 0; i < length; i++) {
blankString += " ";
}
return blankString;
}
public static void main(String[] args) throws FileNotFoundException, IOException {
ClassLoader classLoader = Vote.class.getClassLoader();
String path = classLoader.getResource("").toString().replace("/bin", "").replace("file:/",
"") + "src/json/json.txt";
JSONPrinter jsonPrinter = new JSONPrinter(new File(path));
jsonPrinter.print();
JSONPrinter stringJsonPrinter = new JSONPrinter("{score:100,age:30}");
stringJsonPrinter.print();
}
}
用JAVA给JSON进行排版相关推荐
- java中将json字符串_Java中JSON字符串与java对象的互换实例详解
在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...
- Jmeter之Beanshell使用(二)Java处理JSON块
[环境] ①Jmeter版本:3.2,JDK:1.8 ②前置条件:将json.jar包置于..\apache-jmeter-3.2\lib\下,并将该jar包添加到测试计划的Library中:否则会报 ...
- java与json,java与json
1.json的基本语法 1.表示一个对象 {"name":'"zhangsan","age":22} {"name":& ...
- Java - Jackson JSON Java Parser API
文章目录 概述 依赖 Jackson JSON示例 基础数据 JSON转换为Java对象 Jackson JSON –将JSON转换为Map 概述 Jackson JSON Java Parser非常 ...
- java json太长_修复Long类型太长,而Java序列化JSON丢失精度问题的方法
Java序列化JSON时long型数值,会出现精度丢失的问题. 原因: java中得long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值). 解决办法一: 使用 ...
- Java之JSON数据
特别注意:使用JSON前需要导包 操作步骤地址:http://blog.csdn.net/baidu_37107022/article/details/70876993 1.定义 JSON(JavaS ...
- Java中JSON字符串与java对象的互换实例详解
这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...
- java的json解析工具_json文件解析工具类(java)
附上java解析json文件内容的工具类 1.工具类 import com.alibaba.fastjson.JSONObject; import org.slf4j.Logger; import o ...
- 【Java】Java实现 JSON 的组装和解析
Java 中 JSON 的使用 类库选择 Java中并没有内置JSON的解析,因此使用JSON需要借助第三方类库. 下面是几个常用的 JSON 解析类库: Gson: 谷歌开发的 JSON 库,功能十 ...
最新文章
- Linux下的softlink和hardlink(转)
- 图像处理与计算机视觉:基础,经典以及最近发展(3)计算机视觉中的信号处理与模式识别
- BitBlt和StretchBlt的区别
- 【荐】牛逼的WPF动画库:XamlFlair
- 第八篇: 消息总线(Spring Cloud Bus)(Finchley版本)V2.0_dev
- Ajax--serialize应用表单数据序列化
- 15日直播预告丨SQL条件等价改写秘笈(主讲人:怀晓明)
- apt-get install php5-redis,Ubuntu14-04安装redis和php5-redis扩展
- mysql mariadb 10.4_MariaDB 10.4.1发布,流行的MySQL分支版本
- PHP疗法,人体穴位疗法的秘密-咔咔养生网
- linux IPC socket(2)
- et200sp系统服务器模块,ET200SP GSD文件组态时服务器模块的选择方法
- flask url_for()和redirect的区别
- FFMPEG命令汇总
- 利用Sort_1000pics数据集实现图像分类
- Java 多文件压缩为ZIP
- jquery图片放大镜插件—jqzoom
- Golang学习系列第六天:操作MongoDB
- 微信进化史(未完待续)
- splint在linux的简单使用