Java的json串壓縮功能是一個很實用的工具,可以使得json串的傳輸更加高效。下面,我們就來介紹一下Java中json串壓縮的方法。
/** * 將json串壓縮為一行 * @param jsonString * @return */ public static String compress(String jsonString) { if (jsonString == null || "".equals(jsonString)) { return jsonString; } StringBuilder sb = new StringBuilder(); char last = '\n'; char current = '\n'; int length = jsonString.length(); for (int i = 0; i< length; i++) { last = current; current = jsonString.charAt(i); if (current == ' ' || current == '\t' || current == '\r') { continue; } if (current == '\"' && last != '\\') { sb.append(current); for (i++; i< length; i++) { char temp = jsonString.charAt(i); if (temp == '\\' && jsonString.charAt(i + 1) == '\"') { sb.append("\\\""); i++; } else if (temp == '\"') { sb.append(temp); break; } else { sb.append(temp); } } continue; } sb.append(current); } return sb.toString().replaceAll(": ", ":").replaceAll(", ", ","); }
上述代碼中,我們使用了StringBuilder來動態生成壓縮后的json串。我們首先定義了兩個字符變量last和current,分別記錄上一個和當前遍歷到的字符。然后,我們在遍歷json串時,判斷當前字符是否為空格、制表符或回車符,如果是,就直接跳過;如果是引號(即開始或結束一個字符串),則將整個字符串連同引號一起壓縮,并在遍歷過程中對轉義字符進行處理;否則,就直接將當前字符添加到StringBuilder中。
最后,我們通過使用replaceAll方法來去掉生成的json串中的空格和冒號間的空格,進一步達到對json串的壓縮效果。