首页 > 其他分享 >json字符串格式化工具

json字符串格式化工具

时间:2023-04-20 16:32:25浏览次数:34  
标签:字符 缩进 格式化 number json result key 字符串 append


public class JsonFormatTool {

    /**
     * 单位缩进字符串。
     */
    private static String SPACE = "   ";

    /**
     * 返回格式化JSON字符串。
     *
     * @param json 未格式化的JSON字符串。
     * @return 格式化的JSON字符串。
     */
    public static String formatJson(String json) {
        StringBuffer result = new StringBuffer();

        int length = json.length();
        int number = 0;
        char key = 0;

        // 遍历输入字符串。
        for (int i = 0; i < length; i++) {
            // 1、获取当前字符。
            key = json.charAt(i);

            // 2、如果当前字符是前方括号、前花括号做如下处理:
            if ((key == '[') || (key == '{')) {
                // (1)如果前面还有字符,并且字符为“:”,打印:换行和缩进字符字符串。
                if ((i - 1 > 0) && (json.charAt(i - 1) == ':')) {
                    result.append('\n');
                    result.append(indent(number));
                }

                // (2)打印:当前字符。
                result.append(key);

                // (3)前方括号、前花括号,的后面必须换行。打印:换行。
                result.append('\n');

                // (4)每出现一次前方括号、前花括号;缩进次数增加一次。打印:新行缩进。
                number++;
                result.append(indent(number));

                // (5)进行下一次循环。
                continue;
            }

            // 3、如果当前字符是后方括号、后花括号做如下处理:
            if ((key == ']') || (key == '}')) {
                // (1)后方括号、后花括号,的前面必须换行。打印:换行。
                result.append('\n');

                // (2)每出现一次后方括号、后花括号;缩进次数减少一次。打印:缩进。
                number--;
                result.append(indent(number));

                // (3)打印:当前字符。
                result.append(key);

                // (4)如果当前字符后面还有字符,并且字符不为“,”,打印:换行。
                if (((i + 1) < length) && (json.charAt(i + 1) != ',')) {
                    result.append('\n');
                }

                // (5)继续下一次循环。
                continue;
            }

            // 4、如果当前字符是逗号。逗号后面换行,并缩进,不改变缩进次数。
            if ((key == ',')) {
                result.append(key);
                result.append('\n');
                result.append(indent(number));
                continue;
            }

            // 5、打印:当前字符。
            result.append(key);
        }

        return result.toString();
    }

    /**
     * 返回指定次数的缩进字符串。每一次缩进三个空格,即SPACE。
     *
     * @param number 缩进次数。
     * @return 指定缩进次数的字符串。
     */
    private static String indent(int number) {
        StringBuffer result = new StringBuffer();
        for (int i = 0; i < number; i++) {
            result.append(SPACE);
        }
        return result.toString();
    }
}

标签:字符,缩进,格式化,number,json,result,key,字符串,append
From: https://blog.51cto.com/u_16033209/6209841

相关文章

  • Text Editor (CF2E) (DP字符串2端分别dp)
      思路:首先贪心出性质,通过模拟这个题意,一定是先右边弄完在去左边弄,或者左弄完去右边弄,于是左右2边分别dp一次然后求和dp[i][j],表示i和j匹配的时的最小操作次数 转移的时候有一个贪心结论,当si!=tj时,这个贡献时一个固定值,正向:首先i-(公共的),反......
  • oracle 插入字符串
    一直都认为oracle有插入方法,可是没找到,就写了一个凑合用写的是procedure,需要的可以把他改成function--插入字符串createorreplaceprocedureinsert_pro(strinvarchar2,--str为原字符串strindexinnumber,--strindex为插入的开始位置,会插入他的后边......
  • 03-Ajax传输json和XML
    title:03-Ajax传输json和XMLpublish:trueAjax传输JSONJSON的语法JSON(JavaScriptObjectNotation):是ECMAScript的子集。作用是进行数据的交换。语法更为简洁,网络传输、机器解析都更为迅速。语法规则:数据在键值对中数据由逗号分隔花括号保存对象方括号......
  • 使用OPENJSON()在ADO使用报错:指定了非不二类型的表达式
    背景:工单管理功能,供应商信息字段是存的JSON字符串(数据库是2008R2版本),这个功能没有使用ES,现在业务需要增加供应商相关信息的查询实现:利用OPENJSON函数用ADO拼接Sql执行的时候报以上错误,复制sql出来放到DBeaver里面执行又没有问题,同样的sql,至于任务紧张不展开研究了,换成存储过......
  • vscode 格式化统一配置 settings.json
    {"workbench.colorTheme":"DefaultDark+","eslint.autoFixOnSave":true,"editor.codeActionsOnSave":{"source.fixAll.eslint":true},"[javascript]":{ "......
  • Spring 3 mvc中返回pdf,json,xml等不同的view
    评:springmvc就是好,特别是rest风格的话,一个org.springframework.web.servlet.view.ContentNegotiatingViewResolver就可以根据不同的场景返回不同的view了,比如返回json,xml,pdf等.马上看代码实现先是一个简单的pojoJava代码收藏代码packagecom.hmkcode.vo;impor......
  • js 时间格式化 与 js 时间比较 函数
    评://对Date的扩展,将Date转化为指定格式的String//月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q)可以用1-2个占位符,//年(y)可以用1-4个占位符,毫秒(S)只能用1个占位符(是1-3位的数字)//例子://(newDate()).Format("yyyy-MM-dd......
  • JavaScript字符串的常用操作
    在JavaScript中,字符串是不可变的,也就是说,一旦创建了一个字符串,就不能直接修改其值。如果需要对字符串进行修改,则需要创建一个新的字符串。字符串的增删改查操作如下:1.字符串的增加可以使用加号运算符`+`将两个字符串连接起来,从而实现字符串的增加。```javascriptvarstr1=......
  • 前端跨域解决方案——JSONP
    JSONP(JSONwithPadding)是一种跨域请求的解决方案,它允许在不受同源策略限制的情况下从一个域中向另一个域中请求数据。JSONP的基本原理是利用<script>标签的src属性没有跨域限制的特性来实现跨域数据访问。在使用JSONP时,需要在客户端创建一个script标签,将需要访问的资......
  • jsonfilter 和 jshn.sh
    jsonfilter和jshn.sh来源https://blog.csdn.net/weixin_39637151/article/details/110610608 OpenWRT下自带了两个处理JSON文件的工具。工具一:/usr/bin/jsonfilter运行/usr/bin/jsonfilter得到如下提示:/usr/bin/jsonfilter命令行参数-a:将输入当数组处理。-i:指......