精华内容
下载资源
问答
  • 易语言-纯算法格式化json文本源码
  • 手写一个json格式化 api

    千次阅读 2016-11-06 22:42:54
    最近写的一个东西需要对json字符串进行格式化然后显示在网页上面。 我就想去网上找找有没有这样的api可以直接调用。百度 json api ,搜索结果都是那种只能在网页上进行校验的工具,没有api。 那只有自己去实现一个...

    最近写的一个东西需要对json字符串进行格式化然后显示在网页上面。
    我就想去网上找找有没有这样的api可以直接调用。百度 json api ,搜索结果都是那种只能在网页上进行校验的工具,没有api。
    那只有自己去实现一个json 格式化工具。
    仔细分析,实现起来并不是很困难,至少思路很清晰。

    需要解决的几个问题:
    对json的校验:主要是符号的匹配;
    格式化预处理:去除键值对之间的空白字符;
    格式化:主要是缩进的问题,要符合json通常展示的格式。

    解决的办法:
    针对A问题:
    可以采用栈去匹配符号,大括号、中括号、双引号等。
    针对B问题:
    可以用fastjson的JSONObject.toString()方法实现,自动去除键值对之间的空白字符。
    针对C问题:
    在需要换行的地方追加\n,缩进的地方追加\t。通过控制追加的\t的个数从而控制缩进量。

    具体实现:

    package demo;
    
    import com.alibaba.fastjson.JSONException;
    import com.alibaba.fastjson.JSONObject;
    
    
    
    /**
     * @author ZBX
     * 
     * 将json字符串添加 换行符和制表符使其能够直接在网页上按照通常的json格式显示
     * 
     */
    public class JSONFormatUtil {
        private String src;
            private int TABLength = 0;
    
             private final String BRACKET_LEFT = "[";
             private final String BRACKET_RIGHT = "]";
             private final String BRACE_LEFT = "{";
             private final String BRACE_RIGHT = "}";
             private final String COMMA = ",";
             private final String LINE_BREAK = "\n";
             private final String TAB = "\t";
    
    
             public JSONFormatUtil(String src){
                 this.src = src;
             }
    
         public String format() throws JSONException{
                 try{
                     JSONObject json = JSONObject.parseObject(src);
                 }catch (JSONException e){
                     //对json进行简单的校验,如果不符合格式那么jsonobject在解析的时候会报错
                     throw e;
                 }
            return format(src);
            }
    
            private String format(String src) {
                StringBuffer result = new StringBuffer();
                char[] srcArray = src.toCharArray();
            for (int index = 0; index < src.length(); index++) {
                result.append(srcArray[index]);
    
                     if (BRACE_LEFT.equals(String.valueOf(srcArray[index])))  //{
                        result.append(appendLINE_BREAKAndTAB(++TABLength));
    
                   if (BRACE_RIGHT.equals(String.valueOf(srcArray[index]))) //}
                     result.insert(result.length() - 1, appendLINE_BREAKAndTAB(--TABLength));
    
                if (BRACKET_LEFT.equals(String.valueOf(srcArray[index])))    //[
                     result.append(appendLINE_BREAKAndTAB(++TABLength));
    
                if (BRACKET_RIGHT.equals(String.valueOf(srcArray[index])))   //]
                        result.insert(result.length() - 1, appendLINE_BREAKAndTAB(--TABLength));
    
                    if (COMMA.equals(String.valueOf(srcArray[index])))   //,
                        result.append(appendLINE_BREAKAndTAB(TABLength));
                }
           return result.toString();
            }
    
        //追加换行符和   确定长度的制表符
        private String appendLINE_BREAKAndTAB(int TABTimes) {
            StringBuffer temp = new StringBuffer();
                temp.append(appendLINE_BREAK());
             temp.append(appendTAB(TABTimes));
            return temp.toString();
            }
    
        private String appendLINE_BREAK() {
            return LINE_BREAK;
           }
    
        private String appendTAB(int TABTimes) {
            StringBuffer temp = new StringBuffer();
            for (int i = 0; i < TABTimes; i++) {
                temp.append(TAB);
            }
            return temp.toString();
        }
    
         public static void main(String[] args) {
                String toFormat = "";
                JSONFormatUtil jsonFormat = new JSONFormatUtil(toFormat);
                System.out.println(jsonFormat.format());
        }
    
     }
    

    如果把这个放在web项目里面,然后别人就可以根据api协议以Get或者Post请求的方式来调用你的json格式化工具啦~~

    不足:没有对A问题进行实现,只是简单的借用了fastjson的JSONObject.parseObject()方法。
       这个格式化工具最难的地方也是在这里,需要用栈来匹配符号,这就要求对json格式有比较清晰地了解。

    版本二 ——————————————-
    由于上面的需要引用阿里巴巴的jar包 特有版本二

    package demo;  
    
    /** 
     * 该类提供格式化JSON字符串的方法。 
     * 该类的方法formatJson将JSON字符串格式化,方便查看JSON数据。 
     * <p>例如: 
     * <p>JSON字符串:["yht","xzj","zwy"] 
     * <p>格式化为: 
     * <p>[ 
     * <p>     "yht", 
     * <p>     "xzj", 
     * <p>     "zwy" 
     * <p>] 
     *  
     * <p>使用算法如下: 
     * <p>对输入字符串,追个字符的遍历 
     * <p>1、获取当前字符。 
     * <p>2、如果当前字符是前方括号、前花括号做如下处理: 
     * <p>(1)如果前面还有字符,并且字符为“:”,打印:换行和缩进字符字符串。 
     * <p>(2)打印:当前字符。 
     * <p>(3)前方括号、前花括号,的后面必须换行。打印:换行。 
     * <p>(4)每出现一次前方括号、前花括号;缩进次数增加一次。打印:新行缩进。 
     * <p>(5)进行下一次循环。 
     * <p>3、如果当前字符是后方括号、后花括号做如下处理: 
     * <p>(1)后方括号、后花括号,的前面必须换行。打印:换行。 
     * <p>(2)每出现一次后方括号、后花括号;缩进次数减少一次。打印:缩进。 
     * <p>(3)打印:当前字符。 
     * <p>(4)如果当前字符后面还有字符,并且字符不为“,”,打印:换行。 
     * <p>(5)继续下一次循环。 
     * <p>4、如果当前字符是逗号。逗号后面换行,并缩进,不改变缩进次数。 
     * <p>5、打印:当前字符。 
     *  
     * @author  yanghaitao 
     * @version  [版本号, 2014年9月29日] 
     */  
    public class JSONUtil  
    {  
        /** 
         * 单位缩进字符串。 
         */  
        private static String SPACE = "   ";  
    
        /** 
         * 返回格式化JSON字符串。 
         *  
         * @param json 未格式化的JSON字符串。 
         * @return 格式化的JSON字符串。 
         */  
        public 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 String indent(int number)  
        {  
            StringBuffer result = new StringBuffer();  
            for(int i = 0; i < number; i++)  
            {  
                result.append(SPACE);  
            }  
            return result.toString();  
        }  
    
        public static void main(String[] args) {
            JSONUtil tool = new JSONUtil();  
            String toFormat = "{\"status\": \"3\",\"message\": \"\",\"errCode\": \"0\",\"data\": [{\"time\": \"2013-02-26 16:47\",\"context\": \"客户 同事收发家人 已签收 派件员 张xx\"},{\"time\": \"2013-02-26 07:33\",\"context\": \"吉林省xx市xx公司 的派件员 张金达 派件中 派件员电话15xxx73xx87\"},{\"time\": \"2013-02-26 06:02\",\"context\": \"xx省xx市xx公司 已收入\"},{\"time\": \"2013-02-25 15:42\",\"context\": \"xx省xx转运中心公司已发出\"},{\"time\":\"2013-02-25 14:59\",\"context\":\"xx省xx转运中心公司已拆包\"},{\"time\": \"2013-02-24 18:11\",\"context\":\"辽宁省大连市中山区四部公司 已收件\"},{\"time\": \"2013-02-24 17:59\",\"context\":\"辽宁省大连市公司 已收入\"},{\"time\":\"2013-02-23 17:10\",\"context\":\"辽宁省大连市中山区xxxx公司 的收件员 王xx 已收件\" }],\"html\":\"\",\"mailNo\":\"71xxxxx624\",\"expTextName\":\"圆通快递\",\"expSpellName\":\"yuantong\",\"update\":\"1375155719\",\"cache\":\"33196560\",\"ord\":\"DESC\"}";
             System.out.println(tool.formatJson(toFormat));
        }
    }  
    展开全文
  • 格式转换为json 将字符串格式化为json之类的模板 用法 在HTML中 < script src =" https://unpkg.com/format-to-json@2.1.2/fmt2json.min.js " > </ script > < script > const source = `{...
  • 本文实例讲述了python自动格式化json文件的方法。分享给大家供大家参考。具体如下: 这里主要实现将代码混乱的json文件格式化。 还有一小堆python常用算法代码 完整实例代码点击此处本站下载。 class JsonFormatter...
  • 关键在于好的算法这个代码来源于网络,算法已在注释中添加。 工具地址: 链接:... ... * 该类提供格式化JSON字符串的方法。... * 该类的方法formatJsonJSON字符串格式化,方便查看JSON数据...

    关键在于好的算法这个代码来源于网络,算法已在注释中添加。

     

    工具地址:

    链接:https://pan.baidu.com/s/1Ns3cqi0SG3qSqatrZBrl4A
    提取码:2enp
    复制这段内容后打开百度网盘手机App,操作更方便哦

     

    /**
     * 该类提供格式化JSON字符串的方法。
     * 该类的方法formatJson将JSON字符串格式化,方便查看JSON数据。
     * <p>例如:
     * <p>JSON字符串:["yht","xzj","zwy"]
     * <p>格式化为:
     * <p>[
     * <p>     "yht",
     * <p>     "xzj",
     * <p>     "zwy"
     * <p>]
     *
     * <p>使用算法如下:
     * <p>对输入字符串,追个字符的遍历
     * <p>1、获取当前字符。
     * <p>2、如果当前字符是前方括号、前花括号做如下处理:
     * <p>(1)如果前面还有字符,并且字符为“:”,打印:换行和缩进字符字符串。
     * <p>(2)打印:当前字符。
     * <p>(3)前方括号、前花括号,的后面必须换行。打印:换行。
     * <p>(4)每出现一次前方括号、前花括号;缩进次数增加一次。打印:新行缩进。
     * <p>(5)进行下一次循环。
     * <p>3、如果当前字符是后方括号、后花括号做如下处理:
     * <p>(1)后方括号、后花括号,的前面必须换行。打印:换行。
     * <p>(2)每出现一次后方括号、后花括号;缩进次数减少一次。打印:缩进。
     * <p>(3)打印:当前字符。
     * <p>(4)如果当前字符后面还有字符,并且字符不为“,”,打印:换行。
     * <p>(5)继续下一次循环。
     * <p>4、如果当前字符是逗号。逗号后面换行,并缩进,不改变缩进次数。
     * <p>5、打印:当前字符。
     *
     * @author  yanghaitao
     * @version  [版本号, 2014年9月29日]
     */
    public class JsonFormatTool
    {
        /**
         * 单位缩进字符串。
         */
        private static String SPACE = "    ";
    
        /**
         * 返回格式化JSON字符串。
         *
         * @param json 未格式化的JSON字符串。
         * @return 格式化的JSON字符串。
         */
        public 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 String indent(int number)
        {
            StringBuffer result = new StringBuffer();
            for(int i = 0; i < number; i++)
            {
                result.append(SPACE);
            }
            return result.toString();
        }
    }

     

    转载于:https://www.cnblogs.com/gynbk/p/10751010.html

    展开全文
  • JSON字符串格式化

    2017-02-24 09:27:03
    //核心算法package ... * * 该类的方法formatJsonJSON字符串格式化,方便查看JSON数据。  * * 例如:  * * JSON字符串:[“yht”,”xzj”,”zwy”]  * * 格式化为:  * * [  * * “yht”,  * *
    package tools;
    
    /** *核心算法
     *  
     *  * 该类提供格式化JSON字符串的方法。 
     *  * 该类的方法formatJson将JSON字符串格式化,方便查看JSON数据。 
     *  * <p>例如: 
     *  * <p>JSON字符串:[“yht”,”xzj”,”zwy”] 
     *  * <p>格式化为: 
     *  * <p>[ 
     *  * <p>     “yht”, 
     *  * <p>     “xzj”, 
     *  * <p>     “zwy” 
     *  * <p>] 
     *  *  
     *  * <p>使用算法如下: 
     *  * <p>对输入字符串,追个字符的遍历 
     *  * <p>1、获取当前字符。 
     *  * <p>2、如果当前字符是前方括号、前花括号做如下处理: 
     *  * <p>(1)如果前面还有字符,并且字符为“:”,打印:换行和缩进字符字符串。 
     *  * <p>(2)打印:当前字符。 
     *  * <p>(3)前方括号、前花括号,的后面必须换行。打印:换行。 
     *  * <p>(4)每出现一次前方括号、前花括号;缩进次数增加一次。打印:新行缩进。 
     *  * <p>(5)进行下一次循环。 
     *  * <p>3、如果当前字符是后方括号、后花括号做如下处理: 
     *  * <p>(1)后方括号、后花括号,的前面必须换行。打印:换行。 
     *  * <p>(2)每出现一次后方括号、后花括号;缩进次数减少一次。打印:缩进。 
     *  * <p>(3)打印:当前字符。 
     *  * <p>(4)如果当前字符后面还有字符,并且字符不为“,”,打印:换行。 
     *  * <p>(5)继续下一次循环。 
     *  * <p>4、如果当前字符是逗号。逗号后面换行,并缩进,不改变缩进次数。 
     *  * <p>5、打印:当前字符。 
     *  *  
     *  * @author  yanghaitao 
     *  * @version  [版本号, 2014年9月29日] 
     *  
     */
    public class JsonFormatTool
    {
        /**
         *  
         *      * 单位缩进字符串。 
         *      
         */
        private static String SPACE = "";
    
        /**
         *  
         *      * 返回格式化JSON字符串。 
         *      *  
         *      * @param json 未格式化的JSON字符串。 
         *      * @return 格式化的JSON字符串。 
         *      
         */
        public 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));
                    }
    
                    result.append(key);
    
                    //(3)前方括号、前花括号,的后面必须换行。打印:换行。  
                    //(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 String
    
        indent(int number)
    
    
        {
            StringBuffer result = new StringBuffer();
            for (int i = 0; i < number; i++)
            {
                result.append(SPACE);
            }
            return result.toString();
        }
    }


    //测试代码
    JsonFormatTool tool=new JsonFormatTool();
    tool.formatJson(jsonstr);


    展开全文
  • 格式化JSON数据字符串

    万次阅读 2014-09-29 17:25:00
    控制台直接打印的JSON对象,就是一行字符串,不方便查看;为方便查看JSON对象,写了如上格式化JSON的java方法。

    创建项目

    创建maven项目,引入解析JSON所需jar包。pom.xml配置如下:
    		<dependency>
    			<groupId>net.sf.json-lib</groupId>
    			<artifactId>json-lib</artifactId>
    			<version>2.4</version>
    			<!--指定jdk版本 -->
    			<classifier>jdk15</classifier>
    		</dependency>

    解析Java对象

        public static void main(String[] args)
        {
            int age = 23;
            
            Name name = new Name();
            name.setFirstName("zhang");
            name.setLastName("san");
            
            List<String> aihao = new ArrayList<String>();
            aihao.add("pashan");
            aihao.add("movies");
            
            Person person = new Person();
            person.setName(name);
            person.setAge(age);
            person.setAihao(aihao);
            
            JSONObject jo = JSONObject.fromObject(person);
            System.out.println(jo.toString());
        }

    解析如上对象,控制台打印JSON字符串如下:
    {"age":23,"aihao":["pashan","movies"],"name":{"firstName":"zhang","lastName":"san"}}

    格式化JSON对象字符串

    算法:

    对输入字符串,追个字符的遍历
    1、获取当前字符。
    2、如果当前字符是前方括号、前花括号做如下处理:
    (1)如果前面还有字符,并且字符为“:”,打印:换行和缩进字符字符串。
    (2)打印:当前字符。
    (3)前方括号、前花括号,的后面必须换行。打印:换行。
    (4)每出现一次前方括号、前花括号;缩进次数增加一次。打印:新行缩进。
    (5)进行下一次循环。
    3、如果当前字符是后方括号、后花括号做如下处理:
    (1)后方括号、后花括号,的前面必须换行。打印:换行。
    (2)每出现一次后方括号、后花括号;缩进次数减少一次。打印:缩进。
    (3)打印:当前字符。
    (4)如果当前字符后面还有字符,并且字符不为“,”,打印:换行。
    (5)继续下一次循环。
    4、如果当前字符是逗号。逗号后面换行,并缩进,不改变缩进次数。
    5、打印:当前字符。

    代码:

    package com.qidou.dmp.tools;
    
    /**
     * 该类提供格式化JSON字符串的方法。
     * 该类的方法formatJson将JSON字符串格式化,方便查看JSON数据。
     * <p>例如:
     * <p>JSON字符串:["yht","xzj","zwy"]
     * <p>格式化为:
     * <p>[
     * <p>     "yht",
     * <p>     "xzj",
     * <p>     "zwy"
     * <p>]
     * 
     * <p>使用算法如下:
     * <p>对输入字符串,追个字符的遍历
     * <p>1、获取当前字符。
     * <p>2、如果当前字符是前方括号、前花括号做如下处理:
     * <p>(1)如果前面还有字符,并且字符为“:”,打印:换行和缩进字符字符串。
     * <p>(2)打印:当前字符。
     * <p>(3)前方括号、前花括号,的后面必须换行。打印:换行。
     * <p>(4)每出现一次前方括号、前花括号;缩进次数增加一次。打印:新行缩进。
     * <p>(5)进行下一次循环。
     * <p>3、如果当前字符是后方括号、后花括号做如下处理:
     * <p>(1)后方括号、后花括号,的前面必须换行。打印:换行。
     * <p>(2)每出现一次后方括号、后花括号;缩进次数减少一次。打印:缩进。
     * <p>(3)打印:当前字符。
     * <p>(4)如果当前字符后面还有字符,并且字符不为“,”,打印:换行。
     * <p>(5)继续下一次循环。
     * <p>4、如果当前字符是逗号。逗号后面换行,并缩进,不改变缩进次数。
     * <p>5、打印:当前字符。
     * 
     * @author  yanghaitao
     * @version  [版本号, 2014年9月29日]
     */
    public class JsonFormatTool
    {
        /**
         * 单位缩进字符串。
         */
        private static String SPACE = "   ";
        
        /**
         * 返回格式化JSON字符串。
         * 
         * @param json 未格式化的JSON字符串。
         * @return 格式化的JSON字符串。
         */
        public 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 String indent(int number)
        {
            StringBuffer result = new StringBuffer();
            for(int i = 0; i < number; i++)
            {
                result.append(SPACE);
            }
            return result.toString();
        }
    }

    测试用例:

        public static void main(String[] args)
        {
            JsonFormatTool tool = new JsonFormatTool();
            
            int age = 23;
            
            Name name = new Name();
            name.setFirstName("zhang");
            name.setLastName("san");
            
            List<String> aihao = new ArrayList<String>();
            aihao.add("pashan");
            aihao.add("movies");
            
            Person person = new Person();
            person.setName(name);
            person.setAge(age);
            person.setAihao(aihao);
            
            JSONObject jo = JSONObject.fromObject(person);
            System.out.println(jo.toString());
            System.out.println(tool.formatJson(jo.toString()));
        }

    输出:
    {"age":23,"aihao":["pashan","movies"],"name":{"firstName":"zhang","lastName":"san"}}
    {
       "age":23,
       "aihao":
       [
          "pashan",
          "movies"
       ],
       "name":
       {
          "firstName":"zhang",
          "lastName":"san"
       }
    
    }
    


    展开全文
  • json localdatetime时间格式化无效问题

    千次阅读 2020-06-18 09:03:35
    之前有的javabean ,但是进行某些请求时候需要传json格式的字符串所以需要将其转化为json,发现其中localdatetime转换时候时间中间带有T 导致调用失败 网上查阅都是 @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",...
  • 在线判断json格式是否正确

    千次阅读 2013-12-29 00:05:02
    在线JSON校验格式化工具,The Tools to validate and formate ... string with json,在线json格式化工具,json 格式化,json格式化工具,json字符串格式化http://www.bejson.com/go.php?u=http://www.bejson.com/index.php
  • 提出了一种基于JSON的对象序列化算法,该算法通过分析JSON文法并建立对象导航图,透明地将Java对象序列化成JSON表达式,使客户端能够很好地利用JavaScript引擎来解析JSON响应,有效地解决了解析XML所造成的缺陷。
  • json作为常用数据文件,为了传输的效率,在传输前要进行压缩,而在传输后要进行格式化,以便阅读。下面是使用C#完成的格式化和压缩代码。 1 public static string Compress(string json) 2 { 3 ...
  • ExtJs树的递归算法(Java),Json格式

    千次阅读 2011-10-10 14:08:12
    public String modifyStr(String returnStr){//修饰一下才能满足Extjs的Json格式 return ("["+returnStr+"]").replaceAll(",]", "]"); } public static void main(String[] args) { Recursion r = new ...
  • java实现Json格式美化

    千次阅读 2017-12-06 13:56:59
    package com.json;... * 该类的方法formatJsonJSON字符串格式化,方便查看JSON数据。 * 例如: * JSON字符串:["yht","xzj","zwy"] * 格式化为: * [ * "yht", * "xzj", * "zwy" * ] * * 使用算法
  • A a = new A(); a.age = 11; a.name = “Name”; B b = new B(); b.Money = 10000; //b.Name = “小样”;...将对象变为json格式 输出:{“age”:11,“name”:“Name”,“B”:{“Money”:10...
  • 今天在群里有群友求助,吾正好有空,顺便解答一下。...主要解决内容:将一个数据表生成一个JSON格式的,有层次结构的“目录”树。 生成的JSON字符串经过格式化后,如下图所示: 图1 效果图
  • java实现Json格式美化【工具包系列】

    千次阅读 2017-01-17 09:47:09
    package com.json;... * 该类的方法formatJsonJSON字符串格式化,方便查看JSON数据。 * 例如: * </p><p>JSON字符串:["yht","xzj","zwy"] * </p><p>格式化为: * </p><p>[ * </p><p> "yht", * </p><p> "xz
  • 把数据转换成json格式的字符串

    千次阅读 2017-09-20 16:43:07
    最近写程序遇到一个问题,把一些数据转换成json格式的字符串保存起来,这些数据有普通的键值对,还有列表类型的,下面写了一个小例子,列表数据以复选框CheckBox形式来展示,另外模拟加了一个普通数据的字段,当点击...
  • 【Python3.5】读写JSON格式的数据

    万次阅读 2016-12-14 00:29:40
    由于最近在玩ELK数据分析,慢慢的对JSON格式的数据有了一些了解,之前只知道JSON是Javascript Object Notation编码格式的数据,且在web开发中的前后端数据传输时会大部分用的都是json格式的数据,那么接下来我们就...
  • 它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库。Fastjson接口简单易用,已经被广泛使用在缓存序列、协议交互、Web输出、Android客户端等多种应用场景。 ...
  • js判断是否是json格式

    2020-08-11 13:00:38
    JSON.parse(JSON.stringify(str))
  • JSON格式
  • 公众号后台回复“图书“,了解更多号主新书内容作者:俊欣来源:数据分析与篮球JSON数据格式在我们的日常工作中经常会接触到,无论是做爬虫开发还是一般的数据分析处理,今天,小编就来分享一下当...
  • SparkSQL 操作 Json 格式数据

    千次阅读 2017-07-24 10:22:17
    那么你可以按照上述的方式平坦结构体,使其具有单独的列。 此方法目前在SQL中不可用。 // input { "a" : "{\"b\":1}" } Python : schema = StructType (). add ( "b" , IntegerType ()) ...
  • 包括基本类型、JavaBean、Collection、Map、Enum、泛型等,fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库,包括曾经号称最快的jackson。以下简单的Map、List转换json示例: import ...
  • 一、背景 最近刚刚做完一个中文汉字...移动Web开发,数据压缩,后端压缩传输的json格式数据 JSON压缩算法 JSON.hpack json.hpack JSON压缩:JSONMinify json 压缩算法 压缩 json 的一些尝试 极限压缩 json 文件 大小 ...
  • 其中优化之后,将数据库的内容,序列成为了json数据,然后通过解析json数据,拿到汉字笔画的相关信息。但是未处理前的json文件,体积较大,有2.13Mb,因此需要压缩才行。 部分数据如下所示: { "33828" ...
  • Java递归算法构造JSON树形结构

    千次阅读 2014-11-04 12:58:27
    最近项目中有一个需求,数据库中的菜单表是一个常见的id-pid结构,需要把它构建成树形的JSON格式发送给第三方,写出来之后感觉也是很简单的,核心代码只有5行,重要的是思路要明确,这里把源码分享给大家。...
  • 最近碰到一个问题:在C#里生成json格式字符串的时候,发现生成出来的顺序是颠倒的,如下图中的类:public class Person { public string name{get;set;}//姓名 public int age{get;set;} //年龄 public bool sex_...
  • Emmmm…最近在做项目的途中,有...但是…不知道前端是格式改了但是参数还是用的json格式没有改成键值对的方式传递还是什么原因,就一直说参数传不过来,叫我改回json格式的。。我也实在是懒,另外一个也觉得没必要,就
  • fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库,包括曾经号称最快的jackson。并且还超越了google的二进制协议protocol buf。Fastjson完全支持 http://json.org 的标准,也是官方网站收录的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 57,976
精华内容 23,190
关键字:

json格式化算法