解压时的JSON格式问题

时间:2018-09-06 19:47:09

标签: java json gzip

解压缩后,我得到下面的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();


}

0 个答案:

没有答案