JSON压缩:JSONMinify

来源:互联网 发布:用友软件单机版 编辑:程序博客网 时间:2024/04/29 16:15

JSON压缩:JSONMinify

JSONMinify 2014-04-01 17:23:16 发布
您的评价:
     
3.5 
    0收藏

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("//")) {          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();  }}
0 0