功能:可以把一行的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进行排版相关推荐

  1. java中将json字符串_Java中JSON字符串与java对象的互换实例详解

    在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...

  2. Jmeter之Beanshell使用(二)Java处理JSON块

    [环境] ①Jmeter版本:3.2,JDK:1.8 ②前置条件:将json.jar包置于..\apache-jmeter-3.2\lib\下,并将该jar包添加到测试计划的Library中:否则会报 ...

  3. java与json,java与json

    1.json的基本语法 1.表示一个对象 {"name":'"zhangsan","age":22} {"name":& ...

  4. Java - Jackson JSON Java Parser API

    文章目录 概述 依赖 Jackson JSON示例 基础数据 JSON转换为Java对象 Jackson JSON –将JSON转换为Map 概述 Jackson JSON Java Parser非常 ...

  5. java json太长_修复Long类型太长,而Java序列化JSON丢失精度问题的方法

    Java序列化JSON时long型数值,会出现精度丢失的问题. 原因: java中得long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值). 解决办法一: 使用 ...

  6. Java之JSON数据

    特别注意:使用JSON前需要导包 操作步骤地址:http://blog.csdn.net/baidu_37107022/article/details/70876993 1.定义 JSON(JavaS ...

  7. Java中JSON字符串与java对象的互换实例详解

    这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...

  8. java的json解析工具_json文件解析工具类(java)

    附上java解析json文件内容的工具类 1.工具类 import com.alibaba.fastjson.JSONObject; import org.slf4j.Logger; import o ...

  9. 【Java】Java实现 JSON 的组装和解析

    Java 中 JSON 的使用 类库选择 Java中并没有内置JSON的解析,因此使用JSON需要借助第三方类库. 下面是几个常用的 JSON 解析类库: Gson: 谷歌开发的 JSON 库,功能十 ...

最新文章

  1. Linux下的softlink和hardlink(转)
  2. 图像处理与计算机视觉:基础,经典以及最近发展(3)计算机视觉中的信号处理与模式识别
  3. BitBlt和StretchBlt的区别
  4. 【荐】牛逼的WPF动画库:XamlFlair
  5. 第八篇: 消息总线(Spring Cloud Bus)(Finchley版本)V2.0_dev
  6. Ajax--serialize应用表单数据序列化
  7. 15日直播预告丨SQL条件等价改写秘笈(主讲人:怀晓明)
  8. apt-get install php5-redis,Ubuntu14-04安装redis和php5-redis扩展
  9. mysql mariadb 10.4_MariaDB 10.4.1发布,流行的MySQL分支版本
  10. PHP疗法,人体穴位疗法的秘密-咔咔养生网
  11. linux IPC socket(2)
  12. et200sp系统服务器模块,ET200SP GSD文件组态时服务器模块的选择方法
  13. flask url_for()和redirect的区别
  14. FFMPEG命令汇总
  15. 利用Sort_1000pics数据集实现图像分类
  16. Java 多文件压缩为ZIP
  17. jquery图片放大镜插件—jqzoom
  18. Golang学习系列第六天:操作MongoDB
  19. 微信进化史(未完待续)
  20. splint在linux的简单使用

热门文章

  1. 深度学习基础——week1
  2. 在linux里面把一个在前台运行的命令转为后台运行
  3. 永远不要再犯的 5 个编程错误
  4. 嘉立创专业板stm32拓展板十分钟快速入门
  5. Linux下常见的日志文件名
  6. 洛谷刷题C语言:Physics Problem、PARKING、Trol、信息学竞赛、POT
  7. 2023年,哪些行业,值得加入?
  8. 计算机课可用论文范文,计算机科学课程论文范文2篇
  9. R语言抓取广州租房信息
  10. 【go语言圣经】 初识 go