如何在Java中压缩JSON并在Javascript中解压缩

14

我有大量数据从服务器发往Javascript,加载时间较长。

我想知道如何在服务器端实现压缩,并在Javascript中进行解压缩。感激不尽。


请查看此处http://json.org/java/,以及此处https://developer.mozilla.org/en-US/docs/JSON。 - elclanrs
3
你的意思是编码/解码还是压缩/解压缩?我有点困惑。 - Akshay Khandelwal
3
尝试使用gzip压缩,因为大多数浏览器默认处理gzip压缩。如果这还不够,我们需要了解您正在发送的数据类型,以便尝试帮助您进一步缩小这些数据。 - GitaarLAB
你使用哪个Web服务器? - hgoebl
感谢您的快速回复,我的实际问题是我从Java程序返回大量JSON数据到JavaScript。我想知道是否有任何方法可以减小JSON对象的大小。Jboss5是我的应用服务器。 - user3118357
1个回答

16

要压缩您的字符串,您可以使用:

public static String compress(String str) throws IOException {
    if (str == null || str.length() == 0) {
        return str;
    }
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    GZIPOutputStream gzip = new GZIPOutputStream(out);
    gzip.write(str.getBytes());
    gzip.close();
    String outStr = out.toString("UTF-8");
    return outStr;
 }

GZIPOutputStream是来自java.util.zip的类。

大多数浏览器都能够处理经过gzip压缩的内容,无需手动解压。

文档:GZIPOutputStream

如果您在客户端使用Ajax进行数据获取,请参阅使用AJAX加载GZIP JSON文件。根据@hgoebl的建议,必须设置响应头。


抱歉,但这不应该在您的代码中完成。Web服务器、Tomcat或ServletFilter应该处理此任务。顺便说一句,将GZIP字节编码为ISO-8859-1是完全错误的。 - hgoebl
他有提到任何应用服务器吗?他明确询问如何压缩某些内容,回答中也提供了这方面的信息。不过你对于 ISO 的部分完全正确,我会将其编辑为 UTF-8。谢谢。 - Dropout
这仍然是错误的方式,只是工作的非常小的一部分。他如何在客户端解压缩?使用GZIP JavaScript库吗?这应该由Web服务器或Tomcat/Jersey/RESTeasy/...和客户端上的Web浏览器透明处理。 - hgoebl
实际上,我们可能都同意这样做的方式是逐步加载JSON数据,而不是压缩。我怀疑他在加载后立即需要所有数据。但解压应该由浏览器自动处理。例如,在从Ajax调用接收数据后,浏览器会根据接收到的数据标识头执行正确显示内容所需的一切操作,就我所知。或者我错了吗? - Dropout
3
我同意第一部分,他不应该发送所有数据,而是使用某种形式的分页或主从查询。但你压缩的方式对浏览器不可见。他只会得到无法解析的垃圾数据。你需要设置HTTP头,让浏览器知道负载已经被压缩。 - hgoebl
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接