JSON壓縮:JSONMinify

jopen 10年前發布 | 57K 次閱讀 JSON開發包 JSONMinify

JSONMinify 移除了 JSON 或者 JSON+C(JSON+C = JSON with comments) 文檔中的所有空白和注釋,實現對 JSON 內容的最小化壓縮。實現無開銷和近乎完美的表現。這個包只有53行源碼:

public class JSONMinify {
  public static String minify(String jsonString) {
    boolean in_string = false;
    boolean in_multiline_comment = false;
    boolean in_singleline_comment = false;
    char string_opener = 'x'; // unused value, just something that makes compiler happy

    StringBuilder out = new StringBuilder();
    for (int i = 0; i < jsonString.length(); i++) {
      // get next (c) and next-next character (cc)

      char c = jsonString.charAt(i);
      String cc = jsonString.substring(i, Math.min(i+2, jsonString.length()));

      // big switch is by what mode we're in (in_string etc.)
      if (in_string) {
        if (c == string_opener) {
          in_string = false;
          out.append(c);
        } else if (c == '\\') { // no special treatment needed for \\u, it just works like this too
          out.append(cc);
          ++i;
        } else
          out.append(c);
      } else if (in_singleline_comment) {
        if (c == '\r' || c == '\n')
          in_singleline_comment = false;
      } else if (in_multiline_comment) {
        if (cc.equals("*/")) {
          in_multiline_comment = false;
          ++i;
        }
      } else {
        // we're outside of the special modes, so look for mode openers (comment start, string start)
        if (cc.equals("/*")) {
          in_multiline_comment = true;
          ++i;
        } else if (cc.equals("http://")) {
          in_singleline_comment = true;
          ++i;
        } else if (c == '"' || c == '\'') {
          in_string = true;
          string_opener = c;
          out.append(c);
        } else if (!Character.isWhitespace(c))
          out.append(c);
      }
    }
    return out.toString();
  }
}

項目主頁:http://www.baiduhome.net/lib/view/home/1396341282450

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!