Мне нужно сжать список словарей с помощью gzip и отправить в качестве параметра запроса в бэкэнд-API. При использовании библиотеки gzip я не смог отправить json, потому что каждый раз получал неверный запрос от сервера. Вот пример данных:
[{'name':'John'}, {'name': 'Clark'}]
Сначала я попытался использовать версию 1 кода ниже, но я всегда получаю
TypeError: ожидается строковый аргумент, получил ' bytes '
Итак, я попробовал версию 2, которая возвращает неверный запрос. Есть другой аналогичный ответ, но мне нужно сделать это с файловым объектом. Не могли бы вы указать, где я иду не так?
Версия 1
import gzip
import json
import io
inp1 = {"name": "John"}
inp2 = {"name": "Clark"}
final_inp = []
final_inp.append(inp1)
final_inp.append(inp2)
print(final_inp)
data = json.dumps(final_inp)
out = io.StringIO()
with gzip.GzipFile(fileobj=out, mode="w") as f:
f.write(data)
res = out.getvalue()
print(res)
Версия 2
# same imports and declartion from version 1
# this code works but i have to do it using version 1.
data = json.dumps(final_inp)
out = io.BytesIO()
with gzip.GzipFile(fileobj=out, mode="wb") as f:
f.write(data.encode())
res = out.getvalue()
print(res)