从 json 解压缩 gzip 字节

Decompressing gzip bytes from json

我正在尝试处理来自 SQS 消息的消息。

我的同事正在发送 json 对象,该对象具有一个使用 java 使用 gzip 压缩的字段。所以基本上它是 gzip 压缩字节流。

当我尝试直接在 SQS 上查看时,该字段如下所示:

"Message" : "\u001F�\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000mRmo�P\u0014�/M�h2�N�~1&�43?\u0019�X��R�\u001A(\u0004J�%&���\r��\u0000\u001Bn\u000B\u0010�\u0019\u0006\u0012�8d2�zo/��[.�F퇛��<�9�9缠Ԕeh1}�2��N�\u0014<.9�\u001C�;�pO�G���\u0002�yP��~�\u0013�t�_��姹:�B,-�=\u0004\r\u001AcH\u0010!��@-Rz2��c��8��Ĉ ��A>��o������\t��Kx;m��=��H ��\u0006~����t\"��˼p6����,����\u0012q\u001F%������e%��2����c��,-3w��lzv��7���� ��t��-Uɰ��\u0010��9Q��\u0014\u00108]\n����\u0005TU��\u0006\u001E��R$\u0012����8����4%?�� \u0007\u0007Р\t\n5l��-����?D#��\u001EՇi)]��\u0012����W��2V\u0000[��i����li\u0017������RZ´t��.��K��o��\u0013��|\u001F\u0013��]ż!r��MRd������F\u001C+��_��:\u0017\u00132����b\u0013������L��U19�\u0019\u0017@����~��:��(cA��\u0015\u0019^RL��&��{��r��d��\u0018��n��N\u001F\r��Y��\u0019����M������ \u0010~��z;��\u001E�@o��vq����B\u0002��Q�\u0004>�G�mwo�*���\u0002M�MZ�e��M�̪\u0010\u0014S���$�7V1��ߡL�W1�y��W&{��!\u001A\u001C6��\u0003�\u001DX����\u00105�\u0000{\u0002���J�\f���sQ����\u0003xP��6�d�U�z�\u000BJ�\u0017�i\u0003\u0000\u0000",`

我的代码:

for message in queue.receive_messages(AttributeNames=['All']):

    message_dict = json.loads(message.body)
    compressed = message_dict['Message']
    ungziped_str = zlib.decompressobj().decompress(bytes(compressed.encode('utf-8')))

给出:

zlib.error: Error -3 while decompressing data: incorrect header check

有什么方法可以阅读它的内容吗?

顺便说一下,我试过 ,但仍然是同样的错误信息。

Michael -sqlbot 是对的。 根据 aws sqs 文档: 它支持 3 种不同的数据类型:

  1. String – 字符串是采用 UTF-8 二进制编码的 Unicode。有关代码值列表,请参阅 http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters.
  2. Number – 数字是正整数或负整数或浮点数。数字具有足够的范围和精度来包含整数、浮点数和双精度数通常支持的大多数可能值。一个数字最多可以有 38 位精度,它可以在 10^-128 到 10^+126 之间。删除前导零和尾随零。
  3. 二进制 – 二进制类型属性可以存储任何二进制数据,例如压缩数据、加密数据或图像。

它希望用户输入一个 Base-64 编码的值来发送二进制类型。