java格式化json_java格式化Json字符串

package com.format;

import java.util.ArrayList;

public class JsonFormatTool {

/**

* json字符串的格式化

* @author peiyuxin

* @param json 需要格式的json串

* @param fillStringUnit每一层之前的占位符号比如空格 制表符

* @return

*/

public static String formatJson(String json, String fillStringUnit) {

if (json == null || json.trim().length() == 0) {

return null;

}

int fixedLenth = 0;

ArrayList tokenList = new ArrayList();

{

String jsonTemp = json;

//预读取

while (jsonTemp.length() > 0) {

String token = getToken(jsonTemp);

jsonTemp = jsonTemp.substring(token.length());

token = token.trim();

tokenList.add(token);

}

}

for (int i = 0; i < tokenList.size(); i++) {

String token = tokenList.get(i);

int length = token.getBytes().length;

if (length > fixedLenth && i < tokenList.size() - 1 && tokenList.get(i + 1).equals(":")) {

fixedLenth = length;

}

}

StringBuilder buf = new StringBuilder();

int count = 0;

for (int i = 0; i < tokenList.size(); i++) {

String token = tokenList.get(i);

if (token.equals(",")) {

buf.append(token);

doFill(buf, count, fillStringUnit);

continue;

}

if (token.equals(":")) {

buf.append(" ").append(token).append(" ");

continue;

}

if (token.equals("{")) {

String nextToken = tokenList.get(i + 1);

if (nextToken.equals("}")) {

i++;

buf.append("{ }");

} else {

count++;

buf.append(token);

doFill(buf, count, fillStringUnit);

}

continue;

}

if (token.equals("}")) {

count--;

doFill(buf, count, fillStringUnit);

buf.append(token);

continue;

}

if (token.equals("[")) {

String nextToken = tokenList.get(i + 1);

if (nextToken.equals("]")) {

i++;

buf.append("[ ]");

} else {

count++;

buf.append(token);

doFill(buf, count, fillStringUnit);

}

continue;

}

if (token.equals("]")) {

count--;

doFill(buf, count, fillStringUnit);

buf.append(token);

continue;

}

buf.append(token);

//左对齐

if (i < tokenList.size() - 1 && tokenList.get(i + 1).equals(":")) {

int fillLength = fixedLenth - token.getBytes().length;

if (fillLength > 0) {

for(int j = 0; j < fillLength; j++) {

buf.append(" ");

}

}

}

}

return buf.toString();

}

private static String getToken(String json) {

StringBuilder buf = new StringBuilder();

boolean isInYinHao = false;

while (json.length() > 0) {

String token = json.substring(0, 1);

json = json.substring(1);

if (!isInYinHao &&

(token.equals(":") || token.equals("{") || token.equals("}")

|| token.equals("[") || token.equals("]")

|| token.equals(","))) {

if (buf.toString().trim().length() == 0) {

buf.append(token);

}

break;

}

if (token.equals("\\")) {

buf.append(token);

buf.append(json.substring(0, 1));

json = json.substring(1);

continue;

}

if (token.equals("\"")) {

buf.append(token);

if (isInYinHao) {

break;

} else {

isInYinHao = true;

continue;

}

}

buf.append(token);

}

return buf.toString();

}

private static void doFill(StringBuilder buf, int count, String fillStringUnit) {

buf.append("\n");

for (int i = 0; i < count; i++) {

buf.append(fillStringUnit);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值