java如何將json資料格式化輸出到控制檯
阿新 • • 發佈:2019-01-08
2018年08月24日更新:修復了部分情況json分行錯誤(json的value裡面存在“,”)
/** * 輸出json * * @param response json格式響應實體 */ public static void output(JSONObject jsonObject) { if (jsonObject == null || jsonObject.isEmpty()) { output("json 物件是空的!"); return; } String start = SourceCode.getManyString(SPACE_1, 3); String jsonStr = jsonObject.toString();// 先將json物件轉化為string物件 jsonStr = jsonStr.replaceAll("\\\\/", OR); int level = 0;// 使用者標記層級 StringBuffer jsonResultStr = new StringBuffer("> ");// 新建stringbuffer物件,使用者接收轉化好的string字串 for (int i = 0; i < jsonStr.length(); i++) {// 迴圈遍歷每一個字元 char piece = jsonStr.charAt(i);// 獲取當前字元 char last = jsonResultStr.charAt(jsonResultStr.length() - 1); // 如果上一個字元是斷行,則在本行開始按照level數值新增標記符,排除第一行 if (i != 0 && '\n' == last) { for (int k = 0; k < level; k++) { jsonResultStr.append(start); } } switch (piece) { case '{': case '[': // 如果字元是{或者[,則斷行,level加1 jsonResultStr.append(piece + LINE); level++; break; case ',': // 如果是“,”,則斷行 if ("\"0123456789l".contains(last + EMPTY)) jsonResultStr.append(piece + LINE); break; case '}': case ']': // 如果是}或者],則斷行,level減1 jsonResultStr.append(LINE); level--; for (int k = 0; k < level; k++) { jsonResultStr.append(start); } jsonResultStr.append(piece); break; default: jsonResultStr.append(piece); break; } } output("↘ ↘ ↘ ↘ ↘ ↘ ↘ ↘ json ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙"); output(jsonResultStr.toString().replaceAll(LINE, LINE + "> ")); output("↗ ↗ ↗ ↗ ↗ ↗ ↗ ↗ json ↖ ↖ ↖ ↖ ↖ ↖ ↖ ↖ ↖ ↖ ↖ ↖"); }
-----------------------------------分割線----------------------------------------
2018年08月16日更新,主要更新了輸出顯示效果:
/** * 輸出json * * @param response json格式響應實體 */ public static void output(JSONObject jsonObject) { if (jsonObject == null || jsonObject.isEmpty()) { output("json 物件是空的!"); return; } String start = SourceCode.getManyString(SPACE_1, 3); String jsonStr = jsonObject.toString();// 先將json物件轉化為string物件 jsonStr = jsonStr.replaceAll("\\\\/", OR); int level = 0;// 使用者標記層級 StringBuffer jsonResultStr = new StringBuffer("> ");// 新建stringbuffer物件,使用者接收轉化好的string字串 for (int i = 0; i < jsonStr.length(); i++) {// 迴圈遍歷每一個字元 char piece = jsonStr.charAt(i);// 獲取當前字元 // 如果上一個字元是斷行,則在本行開始按照level數值新增標記符,排除第一行 if (i != 0 && '\n' == jsonResultStr.charAt(jsonResultStr.length() - 1)) { for (int k = 0; k < level; k++) { jsonResultStr.append(start); } } switch (piece) { case '{': case '[': // 如果字元是{或者[,則斷行,level加1 jsonResultStr.append(piece + LINE); level++; break; case ',': // 如果是“,”,則斷行 jsonResultStr.append(piece + LINE); break; case '}': case ']': // 如果是}或者],則斷行,level減1 jsonResultStr.append(LINE); level--; for (int k = 0; k < level; k++) { jsonResultStr.append(start); } jsonResultStr.append(piece); break; default: jsonResultStr.append(piece); break; } } output("↘ ↘ ↘ ↘ ↘ ↘ ↘ ↘ json ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙"); output(jsonResultStr.toString().replaceAll(LINE, LINE + "> ")); output("↗ ↗ ↗ ↗ ↗ ↗ ↗ ↗ json ↖ ↖ ↖ ↖ ↖ ↖ ↖ ↖ ↖ ↖ ↖ ↖"); }
---------------------------------------分割線-----------------------------------------------
本人在做介面測試的時候,需要把介面返回的json資料列印到控制檯,但是隻能通過tostring方法列印string,後來經過查閱資料,參考了一個別人的思路,自己寫了一個方法輸出json資料的,分享一下,供大家參考。
// 輸出json public void output(JSONObject response) { String start = "丨 "; String jsonStr = response.toString();// 先將json物件轉化為string物件 int level = 0;// 使用者標記層級 StringBuffer jsonResultStr = new StringBuffer();// 新建stringbuffer物件,使用者接收轉化好的string字串 for (int i = 0; i < jsonStr.length(); i++) {// 迴圈遍歷每一個字元 char piece = jsonStr.charAt(i);// 獲取當前字元 // 如果上一個字元是斷行,則在本行開始按照level數值新增標記符,排除第一行 if (i != 0 && '\n' == jsonResultStr.charAt(jsonResultStr.length() - 1)) { for (int k = 0; k < level; k++) { jsonResultStr.append(start); } } switch (piece) { case '{': case '[': // 如果字元是{或者[,則斷行,level加1 jsonResultStr.append(piece + "\n"); level++; break; case ',': // 如果是“,”,則斷行 jsonResultStr.append(piece + "\n"); break; case '}': case ']': // 如果是}或者],則斷行,level減1 jsonResultStr.append("\n"); level--; for (int k = 0; k < level; k++) { jsonResultStr.append(start); } jsonResultStr.append(piece); break; default: jsonResultStr.append(piece); break; } } output(jsonResultStr.toString()); }
下圖是結果顯示: