Java Json字符串格式化
来源:互联网 发布:陕西师范远程网络教育 编辑:程序博客网 时间:2024/05/21 12:50
package com.quanyou.jsonFormat;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* 把json字符串格式化
* @author tangyang
*
*/
public class Format {
/**
* 添加Tab字符的标识字符,当遇到如下字符时会计算是否需要换行和增加当前Tab数
*/
private static final char[] ADD_TAB_NUM_CHAR = new char[] { '[', '{' };
/**
* 减少Tab字符的标识字符,当遇到如下字符时会计算是否需要换行和减少当前Tab数
*/
private static final char[] SUBTRACT_TAB_NUM_CHAR = new char[] { ']', '}' };
/**
* 换行字符
*/
private static final char[] BR_CHAR = new char[] { '\r', '\n' };
/**
* Tab字符
*/
private static final char TAB_CHAR = '\t';
/**
* 遇到","一定会换行
*/
private static final char BR_CHAR_FLAGE = ',';
public static void main(String[] args) {
if(args.length<1){
new Exception("parameter cannot be empty");
}
String fileName = args[0];
if(null == fileName || "".equals(fileName)){
new Exception("file path cannot be null");
}
formcatToJson(fileName);
}
/**
* 格式化字符
* @param fileName
*/
private static void formcatToJson(String fileName){
int tabNum = 0;
boolean isTab = false;
StringBuilder content = new StringBuilder();
char[] charArray = readFile(fileName).toCharArray();
for (int i = 0; i < charArray.length; i++) {
char c = charArray[i];
char n = i < charArray.length - 1 ? charArray[i + 1] : 0;
content.append(c);
isTab = isAddNewLine(c, n);
tabNum += getTabNumStep(c, n);
if (isTab) {
isTab = false;
addTabStr(content, tabNum);
}
}
writeFile(fileName, content.toString());
}
/**
* 从文件读取json串
* @param fileName
* @return
*/
private static String readFile(String fileName){
File file = new File(fileName);
if(!file.exists()){
new Exception("file does not exist");
}
StringBuilder result = new StringBuilder();
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(file));
String tempString = null;
while ((tempString = reader.readLine()) != null) {
result.append(tempString);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return result.toString();
}
/**
* 把格式化好的字符串回写到文件
* @param fileName
* @param content
*/
private static void writeFile(String fileName, String content) {
try {
FileWriter writer = new FileWriter(fileName, false);
writer.write(content);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 判断是是否要添加新行
* @param c
* @param n
* @return
*/
private static boolean isAddNewLine(char c, char n) {
boolean result = false;
if (c == BR_CHAR_FLAGE) {
// ","
result = true;
} else if (c == ADD_TAB_NUM_CHAR[0] && n != SUBTRACT_TAB_NUM_CHAR[0]) {
// "[?"
result = true;
} else if (c == ADD_TAB_NUM_CHAR[0] && n == SUBTRACT_TAB_NUM_CHAR[0]) {
// "[]"
result = false;
} else if (c == ADD_TAB_NUM_CHAR[1] && n != SUBTRACT_TAB_NUM_CHAR[1]) {
// "{?"
result = true;
} else if (c == ADD_TAB_NUM_CHAR[1] && n == SUBTRACT_TAB_NUM_CHAR[1]) {
// "{}"
result = false;
} else if (n == SUBTRACT_TAB_NUM_CHAR[0] || n == SUBTRACT_TAB_NUM_CHAR[1]) {
// "?}","?]"
result = true;
}
return result;
}
/**
* 计算是否要增减tabNum的值
* @param c
* @param n
* @return
*/
private static int getTabNumStep(char c, char n) {
int step = 0;
if (c == ADD_TAB_NUM_CHAR[0] && n != SUBTRACT_TAB_NUM_CHAR[0]) {
// "[?"
step = 1;
} else if (c == ADD_TAB_NUM_CHAR[0] && n == SUBTRACT_TAB_NUM_CHAR[0]) {
// "[]"
step = 0;
} else if (c == ADD_TAB_NUM_CHAR[1] && n != SUBTRACT_TAB_NUM_CHAR[1]) {
// "{?"
step = 1;
} else if (c == ADD_TAB_NUM_CHAR[1] && n == SUBTRACT_TAB_NUM_CHAR[1]) {
// "{}"
step = 0;
} else if (n == SUBTRACT_TAB_NUM_CHAR[0] || n == SUBTRACT_TAB_NUM_CHAR[1]) {
// "?}","?]"
step = -1;
}
return step;
}
/**
* 根据tabNum添加Tab字符
* @param chars
* @param tabNum
*/
private static void addTabStr(StringBuilder chars, int tabNum) {
chars.append(BR_CHAR[0]);
chars.append(BR_CHAR[1]);
for (int i = 0; i < tabNum; i++) {
chars.append(TAB_CHAR);
}
}
}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* 把json字符串格式化
* @author tangyang
*
*/
public class Format {
/**
* 添加Tab字符的标识字符,当遇到如下字符时会计算是否需要换行和增加当前Tab数
*/
private static final char[] ADD_TAB_NUM_CHAR = new char[] { '[', '{' };
/**
* 减少Tab字符的标识字符,当遇到如下字符时会计算是否需要换行和减少当前Tab数
*/
private static final char[] SUBTRACT_TAB_NUM_CHAR = new char[] { ']', '}' };
/**
* 换行字符
*/
private static final char[] BR_CHAR = new char[] { '\r', '\n' };
/**
* Tab字符
*/
private static final char TAB_CHAR = '\t';
/**
* 遇到","一定会换行
*/
private static final char BR_CHAR_FLAGE = ',';
public static void main(String[] args) {
if(args.length<1){
new Exception("parameter cannot be empty");
}
String fileName = args[0];
if(null == fileName || "".equals(fileName)){
new Exception("file path cannot be null");
}
formcatToJson(fileName);
}
/**
* 格式化字符
* @param fileName
*/
private static void formcatToJson(String fileName){
int tabNum = 0;
boolean isTab = false;
StringBuilder content = new StringBuilder();
char[] charArray = readFile(fileName).toCharArray();
for (int i = 0; i < charArray.length; i++) {
char c = charArray[i];
char n = i < charArray.length - 1 ? charArray[i + 1] : 0;
content.append(c);
isTab = isAddNewLine(c, n);
tabNum += getTabNumStep(c, n);
if (isTab) {
isTab = false;
addTabStr(content, tabNum);
}
}
writeFile(fileName, content.toString());
}
/**
* 从文件读取json串
* @param fileName
* @return
*/
private static String readFile(String fileName){
File file = new File(fileName);
if(!file.exists()){
new Exception("file does not exist");
}
StringBuilder result = new StringBuilder();
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(file));
String tempString = null;
while ((tempString = reader.readLine()) != null) {
result.append(tempString);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return result.toString();
}
/**
* 把格式化好的字符串回写到文件
* @param fileName
* @param content
*/
private static void writeFile(String fileName, String content) {
try {
FileWriter writer = new FileWriter(fileName, false);
writer.write(content);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 判断是是否要添加新行
* @param c
* @param n
* @return
*/
private static boolean isAddNewLine(char c, char n) {
boolean result = false;
if (c == BR_CHAR_FLAGE) {
// ","
result = true;
} else if (c == ADD_TAB_NUM_CHAR[0] && n != SUBTRACT_TAB_NUM_CHAR[0]) {
// "[?"
result = true;
} else if (c == ADD_TAB_NUM_CHAR[0] && n == SUBTRACT_TAB_NUM_CHAR[0]) {
// "[]"
result = false;
} else if (c == ADD_TAB_NUM_CHAR[1] && n != SUBTRACT_TAB_NUM_CHAR[1]) {
// "{?"
result = true;
} else if (c == ADD_TAB_NUM_CHAR[1] && n == SUBTRACT_TAB_NUM_CHAR[1]) {
// "{}"
result = false;
} else if (n == SUBTRACT_TAB_NUM_CHAR[0] || n == SUBTRACT_TAB_NUM_CHAR[1]) {
// "?}","?]"
result = true;
}
return result;
}
/**
* 计算是否要增减tabNum的值
* @param c
* @param n
* @return
*/
private static int getTabNumStep(char c, char n) {
int step = 0;
if (c == ADD_TAB_NUM_CHAR[0] && n != SUBTRACT_TAB_NUM_CHAR[0]) {
// "[?"
step = 1;
} else if (c == ADD_TAB_NUM_CHAR[0] && n == SUBTRACT_TAB_NUM_CHAR[0]) {
// "[]"
step = 0;
} else if (c == ADD_TAB_NUM_CHAR[1] && n != SUBTRACT_TAB_NUM_CHAR[1]) {
// "{?"
step = 1;
} else if (c == ADD_TAB_NUM_CHAR[1] && n == SUBTRACT_TAB_NUM_CHAR[1]) {
// "{}"
step = 0;
} else if (n == SUBTRACT_TAB_NUM_CHAR[0] || n == SUBTRACT_TAB_NUM_CHAR[1]) {
// "?}","?]"
step = -1;
}
return step;
}
/**
* 根据tabNum添加Tab字符
* @param chars
* @param tabNum
*/
private static void addTabStr(StringBuilder chars, int tabNum) {
chars.append(BR_CHAR[0]);
chars.append(BR_CHAR[1]);
for (int i = 0; i < tabNum; i++) {
chars.append(TAB_CHAR);
}
}
}
阅读全文
0 0
- java 格式化json字符串
- Java Json字符串格式化
- java对Json字符串的格式化输出
- javascript 格式化 json字符串
- 格式化JSON数据字符串
- json字符串 格式化数据
- Json字符串格式化
- JSON字符串格式化
- json字符串格式化
- JSON.stringify格式化Json字符串
- 用Java对JSON字符串进行格式化输出
- 用Java对JSON字符串进行格式化输出
- 用JAVA把JSON字符串转成JSON格式化的字符串 - tooyond
- json对象格式化字符串输出
- 格式化Json字符串工具-HiJson
- 解析一个JSON格式化字符串
- Java Json格式化工具
- Java JSON时间格式化
- 关于vueThink框架打包发布的一些问题
- 糊糊的前端学习笔记——学习JavaScript,有哪些好的博客或者网站推荐?【Day05】
- MySql视图原理讲解与使用大全
- JSValue 在MRC下定义Block Property引起Block调用异常的一个坑
- 一款好看的文本框点击效果
- Java Json字符串格式化
- ios view改变重叠层次关系
- Vue2.0 从环境搭建到发布(新手完全填坑攻略)
- oracle表空间使用率统计查询
- Python函数
- JVM堆内存设置
- Java时间格式转换大全
- COJ 1003: UC Browser
- 第四场个人训练赛