用Java对JSON字符串进行格式化输出

来源:互联网 发布:辣鸡软件表情 编辑:程序博客网 时间:2024/05/18 15:55

工作中进行http相关接口测试时经常会收到返回的json数据,因为没有格式化输入到控制台后看起来很不直观。

早上写了一个小工具类,对这JSON串进行格式化输出,代替System.out.print

/** * 格式化输入工具类 *  * @author lizhgb * @date 2015-10-14 * @Modified 2017-04-28 *  */public final class FormatUtil {    /**     * 打印输入到控制台     *      * @param jsonStr     * @author lizhgb     * @Date 2015-10-14 下午1:17:22     */    public static void printJson(String jsonStr) {        System.out.println(formatJson(jsonStr));    }    /**     * 格式化     *      * @param jsonStr     * @return     * @author lizhgb     * @Date 2015-10-14 下午1:17:35     * @Modified 2017-04-28 下午8:55:35     */    public static String formatJson(String jsonStr) {        if (null == jsonStr || "".equals(jsonStr))            return "";        StringBuilder sb = new StringBuilder();        char last = '\0';        char current = '\0';        int indent = 0;        boolean isInQuotationMarks = false;        for (int i = 0; i < jsonStr.length(); i++) {            last = current;            current = jsonStr.charAt(i);            switch (current) {            case '"':                                if (last != '\\'){                    isInQuotationMarks = !isInQuotationMarks;                                }                sb.append(current);                break;            case '{':            case '[':                sb.append(current);                if (!isInQuotationMarks) {                    sb.append('\n');                    indent++;                    addIndentBlank(sb, indent);                }                break;            case '}':            case ']':                if (!isInQuotationMarks) {                    sb.append('\n');                    indent--;                    addIndentBlank(sb, indent);                }                sb.append(current);                break;            case ',':                sb.append(current);                if (last != '\\' && !isInQuotationMarks) {                    sb.append('\n');                    addIndentBlank(sb, indent);                }                break;            default:                sb.append(current);            }        }        return sb.toString();    }    /**     * 添加space     *      * @param sb     * @param indent     * @author lizhgb     * @Date 2015-10-14 上午10:38:04     */    private static void addIndentBlank(StringBuilder sb, int indent) {        for (int i = 0; i < indent; i++) {            sb.append('\t');        }    }}

测试:

@Test    public void jsonPrintTest2() {        String str = "{\"content\":\"this is the msg content.\",\"tousers\":\"user1|user2\",\"msgtype\":\"texturl\",\"appkey\":\"test\",\"domain\":\"test\","                + "\"system\":{\"wechat\":{\"safe\":\"1\"}},\"texturl\":{\"urltype\":\"0\",\"user1\":{\"spStatus\":\"user01\",\"workid\":\"work01\"},\"user2\":{\"spStatus\":\"user02\",\"workid\":\"work02\"}}}";        FormatUtil.printJson(str);    }

输出:

{    "content":"this is the msg content.",    "tousers":"user1|user2",    "msgtype":"texturl",    "appkey":"test",    "domain":"test",    "system":{        "wechat":{            "safe":"1"        }    },    "texturl":{        "urltype":"0",        "user1":{            "spStatus":"user01",            "workid":"work01"        },        "user2":{            "spStatus":"user02",            "workid":"work02"        }    }}

转自:

https://my.oschina.net/jasonli0102/blog/517052?p={{page}}#comment-list
0 0
原创粉丝点击