java代码美化json格式

json字符美化

=========== 目前发现一个Bug ===========
如果内容中包含空格,会导致显示有问题,因此,如下工具仅供参考
=========== =========== ===========
更多工具详见:https://github.com/SimonAlong/Doramon

/**
 * @author shizi
 * @since 2020-11-30 18:37:54
 */
public class JsonStrUtils {

    /**
     * 专门用于解析json对应的string到界面回车的显示
     * <p>
     * 比如:[{"age":12,"name":{"women":"test","age":12,"array":[{"name":"test","age":12}],"tem":[1,2,3,4,5],"haode":"women"}},{"age":22,"name":"haode2"}]
     * 结果为:
     * [
     *     {
     *         "age":12,
     *         "name":
     *         {
     *             "women":"test",
     *             "age":12,
     *             "array":
     *             [
     *                 {
     *                     "name":"test",
     *                     "age":12
     *                 }
     *             ],
     *             "tem":
     *             [
     *                 1,2,3,4,5
     *             ],
     *             "haode":"women"
     *         }
     *     },
     *     {
     *         "age":22,
     *         "name":"haode2"
     *     }
     * ]
     */
    public static String prettyJson(String jsonContent) {
        if (null == jsonContent || "".equals(jsonContent)) {
            return null;
        }
        String jsonContentTem = jsonContent.replace("\n", "").replace(" ", "");
        StringBuilder stringBuilder = new StringBuilder();
        // 是否位于数组
        boolean inArray = false;
        // 是否有回车
        boolean haveEnter = true;
        // 是否有空格
        boolean haveSpace = false;
        // 是否已经添加空格
        boolean haveAppendSpace = false;
        // 上一个处理者是否是左大括号
        boolean isRightBracket = false;
        char[] charList = jsonContentTem.toCharArray();
        int spaceCount = 0;
        for (char c : charList) {
            if (c == ',') {
                if (inArray) {
                    stringBuilder.append(c);
                    continue;
                }
                if (isRightBracket) {
                    stringBuilder.append(",\n");
                } else {
                    stringBuilder.append(",\n");
                    if (haveSpace) {
                        stringBuilder.append(addSpace(spaceCount));
                    }

                    haveEnter = true;
                    haveAppendSpace = true;
                }
            } else if (c == '{') {
                if (!haveEnter) {
                    stringBuilder.append("\n");
                }
                if (haveSpace) {
                    stringBuilder.append(addSpace(spaceCount));
                }
                haveSpace = true;
                haveEnter = true;
                isRightBracket = false;
                spaceCount++;

                stringBuilder.append("{\n");
                stringBuilder.append(addSpace(spaceCount));
                haveAppendSpace = true;
            } else if (c == '}') {
                spaceCount--;

                stringBuilder.append("\n");
                if (haveSpace) {
                    stringBuilder.append(addSpace(spaceCount));
                }
                stringBuilder.append("}");

                haveEnter = true;
                isRightBracket = true;
            } else if (c == '[') {
                if (!haveEnter) {
                    stringBuilder.append("\n");
                }
                if (haveSpace) {
                    stringBuilder.append(addSpace(spaceCount));
                }

                inArray = true;
                haveSpace = true;
                isRightBracket = false;
                stringBuilder.append("[\n");
                haveEnter = true;
                spaceCount++;
                haveAppendSpace = false;
            } else if (c == ']') {
                spaceCount--;
                stringBuilder.append("\n");
                if (haveSpace) {
                    stringBuilder.append(addSpace(spaceCount));
                }
                stringBuilder.append("]");

                inArray = false;
                isRightBracket = false;
                haveAppendSpace = false;
            } else {
                if (c == ':') {
                    inArray = false;
                }
                if (!haveAppendSpace) {
                    if (haveSpace) {
                        stringBuilder.append(addSpace(spaceCount));
                    }
                    haveAppendSpace = true;
                }
                stringBuilder.append(c);

                isRightBracket = false;
                haveEnter = false;
            }
        }
        return stringBuilder.toString();
    }

    public static String addSpace(int count) {
        if (count <= 0) {
            return "";
        }
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < count; i++) {
            stringBuilder.append("    ");
        }
        return stringBuilder.toString();
    }
}

测试:

1.对象

{"a":12,"name":"haode"}
{
    "a":12,
     "name":"haode"
}

2.基本数组

[{"age":12,"name":{"women":"test","age":12,"array":[{"name":"test","age":12}]}},{"age":22,"name":"haode2"}]

解析后

[
    {
        "age":12,
        "name":
        {
            "women":"test",
            "age":12,
            "array":
            [
                {
                    "name":"test",
                    "age":12
                }
            ]
        }
    },
    {
        "age":22,
        "name":"haode2"
    }
]

3.数组中为基本类型

[{"age":12,"name":{"women":"test","age":12,"array":[{"name":"test","age":12}],"tem":[1,2,3,4,5],"haode":"women"}},{"age":22,"name":"haode2"}]

解析后

[
    {
        "age":12,
        "name":
        {
            "women":"test",
            "age":12,
            "array":
            [
                {
                    "name":"test",
                    "age":12
                }
            ],
            "tem":
            [
                1,2,3,4,5
            ],
            "haode":"women"
        }
    },
    {
        "age":22,
        "name":"haode2"
    }
]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值