JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,具有易讀性和易于編寫的特點,常用于前后端數據交互。但是在數據傳輸過程中,JSON數據的大小可能會影響網絡傳輸速度,因此需要對數據進行壓縮,提高數據傳輸效率。
Java中提供了多種壓縮JSON數據的方式,其中最常用的是使用Gzip進行壓縮。以下是一個Java代碼示例:
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; import org.json.JSONObject; public class JsonUtil { /** * 壓縮JSON數據 * * @param json JSON數據 * @return 壓縮后的數據 */ public static byte[] compress(String json) throws IOException { byte[] compressed = null; ByteArrayOutputStream out = null; GZIPOutputStream gzout = null; try { out = new ByteArrayOutputStream(); gzout = new GZIPOutputStream(out); gzout.write(json.getBytes("UTF-8")); gzout.finish(); compressed = out.toByteArray(); } finally { if (gzout != null) gzout.close(); if (out != null) out.close(); } return compressed; } /** * 解壓縮JSON數據 * * @param compressed 壓縮后的數據 * @return 解壓縮后的JSON數據 */ public static String decompress(byte[] compressed) throws IOException { byte[] buffer = new byte[1024]; ByteArrayOutputStream out = null; InputStream in = null; GZIPInputStream gzin = null; String json = null; try { out = new ByteArrayOutputStream(); in = new ByteArrayInputStream(compressed); gzin = new GZIPInputStream(in); int len; while ((len = gzin.read(buffer)) >0) { out.write(buffer, 0, len); } json = new String(out.toByteArray(), "UTF-8"); } finally { if (gzin != null) gzin.close(); if (in != null) in.close(); if (out != null) out.close(); } return json; } /** * 將JSON字符串轉化為JSONObject對象 * * @param json JSON字符串 * @return JSONObject對象 */ public static JSONObject str2Json(String json) { JSONObject jo = new JSONObject(json); return jo; } }
以上代碼中,compress方法使用GZIPOutputStream將JSON字符串進行壓縮,并返回壓縮后的byte數組。decompress方法則是將壓縮過的byte數組轉化為JSON字符串。str2Json方法將JSON字符串轉化為JSONObject對象,方便進行后續處理。
使用以上代碼可以對JSON數據進行有效的壓縮,提高數據傳輸效率,同時也保證了數據的安全性。