Làm thế nào để giải mã phản hồi json với dữ liệu được mã hóa gzip trong nháy mắt?

Jan 15 2021

Phản hồi Json có các đối tượng được mã hóa phải được giải mã để có được quy trình thực tế. Trong android, GZip đã được sử dụng. Làm thế nào tôi có thể đạt được điều này. Mẫu Json được đề cập bên dưới. Mọi sự trợ giúp thực sự được đánh giá cao.


            {
                "Data": "1.´ABCD´1150275,11028´01-Jan-2021´8,000.00´",
                "Data": [
                    {
                      "Element": "8iMAAB+LCAAAAAAABADt1T8zBxwHgkefKcGh98Zcdz8FSqj9DMzK4d+L0Nj1tveNR2w6M8rRs3PJWBFDy"
                    },
                    {
                     "Element": "B1AV4bGp6JzQJI8ChnxzixrlT8vKnYHPwRM8zykKVn2gkceAFdxMwU0to"
                    }
                ],

    "Status": 1,
    "Msg": "Success",
    "APIVersion": "1.4"
}

Về cơ bản làm thế nào để giải mã một chuỗi Gzip. Quá trình tương tự đã được thực hiện trong Android, nhưng tôi mới làm quen với mã java Android được đính kèm. tôi muốn đạt được điều gì đó như thế trong sự rung động

    public static String decompress(String zipText) throws IOException {
        byte[] compressed = Base64.decode(zipText, Base64.DEFAULT);
        if (compressed.length > 4) {
            GZIPInputStream gzipInputStream = new GZIPInputStream(new ByteArrayInputStream(compressed, 4,compressed.length - 4));
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            for (int value = 0; value != -1; ) {
                value = gzipInputStream.read();
                if (value != -1) {
                    baos.write(value);
                }
            }
            gzipInputStream.close();
            baos.close();
            return new String(baos.toByteArray(), StandardCharsets.UTF_8);
        } else {
            return "";
        }
    }

Trên con đường tôi đã thử là

  List<int> data  = utf8.encode(zipText);
  var deCompressedString = GZipDecoder().decodeBytes(data);
  print(deCompressedString);

Ngoại lệ ném nào

Unhandled Exception: FormatException: Invalid GZip Signature

Trả lời

1 ch271828n Jan 15 2021 at 21:55

Để giải mã nén: Làm thế nào để giải mã Phản hồi Gzip Http trong Flutter?

BIÊN TẬP

giải nén như thế này

 String decompress(String zipText) {
  final List<int> compressed = base64Decode(zipText);
  if (compressed.length > 4) {
   Uint8List uint8list = GZipDecoder().decodeBytes(compressed.sublist(4, compressed.length - 4));
   // print( String.fromCharCodes(uint8list));
   return String.fromCharCodes(uint8list);
  } else {
   return "";
  }
 }