解压缩后,我得到下面的JSON数组,它看起来很丑陋,并附加了许多额外的\\\\
以及\r
和\n
。我需要使用gson将其转换为java对象。我收到一个解析错误。以下是一个巨大的JSON数组的摘录。有什么好的方法可以删除不需要的斜杠,以便gson可以解析它?
["\"{\\r\\n \\\"MsgHdr\\\" : {\\r\\n \\\"MsgFmtNr\\\" : \\\"CS00030538\\\",\\r\\n \\\"MsgFmtVerNr\\\" : \\\"003.01\\\",\\r\\n \\\"MsgInfSrcCd\\\" : \\\"XT\\\",\\r\\n \\\"MsgOidNr\\\" : null,\\r\\n \\\"MsgTs\\\" : \\\"2018-03-05 04:59:59\\\" }\\r\\n}\""]
下面是我的压缩和解压缩方法。由于将大量json推送到消息队列(google pubsub),因此需要额外的压缩工作来压缩。
public static byte[] compress(String data) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream(data.length());
GZIPOutputStream gzip = new GZIPOutputStream(bos);
gzip.write(data.getBytes());
gzip.close();
byte[] compressed = bos.toByteArray();
bos.close();
return compressed;
}
public static String decompress(byte[] compressed) throws IOException {
StringBuilder sb = new StringBuilder();
try {
ByteArrayInputStream bis = new ByteArrayInputStream(compressed);
log.info("bytearrayinputstream is", bis);
GZIPInputStream gis = new GZIPInputStream(bis);
BufferedReader br = new BufferedReader(new InputStreamReader(gis, "UTF-8"));
// StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
br.close();
gis.close();
bis.close();
} catch (ZipException e) {
log.info("Zip exception occured");
}
return sb.toString();
}