Wie entschlüssele ich eine JSON-Antwort mit gzip-codierten Daten im Flattern?

Jan 15 2021

Die Json-Antwort enthält verschlüsselte Objekte, die entschlüsselt werden müssen, um den eigentlichen Prozess zu erhalten. In Android wurde GZip verwendet. Wie kann ich das erreichen? Das Beispiel Json ist wie unten erwähnt. Jede Hilfe wird wirklich geschätzt.


            {
                "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"
}

Grundsätzlich, wie man eine Gzip-Zeichenfolge entschlüsselt. Der gleiche Prozess wurde in Android gemacht, aber ich bin neu zu flattern Android Java-Code ist angehängt. Ich möchte so etwas im Flattern erreichen

    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 "";
        }
    }

Unterwegs habe ich es versucht war

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

Welche Wurfausnahme

Unhandled Exception: FormatException: Invalid GZip Signature

Antworten

1 ch271828n Jan 15 2021 at 21:55

Zum Entschlüsseln von komprimierten Dateien: Wie dekodiere ich eine Gzip-HTTP-Antwort in Flutter?

BEARBEITEN

so dekomprimieren

 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 "";
  }
 }