Wie entschlüssele ich eine JSON-Antwort mit gzip-codierten Daten im Flattern?
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
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 "";
}
}