1. 程式人生 > >用Java對JSON字串進行格式化輸出

用Java對JSON字串進行格式化輸出

工作中進行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