解码json对象

时间:2017-06-08 20:44:52

标签: python gzip

我正在尝试使用以下代码段从HTTP帖子中获取数据:

import request

# Using @ to signify personal info
url = "@@@@@"

querystring = {"user":"@@@@@yahoo.com"}

headers = {
    'token': 1234,
    'content-type': "application/x-www-form-urlencoded",
    'host': "@@@",
    'connection': "Keep-Alive",
    'accept-encoding': "gzip",
    'content-length': "0",
    'cache-control': "no-cache"
}

response = requests.request("POST", url, headers=headers,     params=querystring)

print(response.text)

我得到以下结果(......是'数据'字符串的其余部分):

{'data': 'H4sIAAAAAAAAAO...T7R358EQT/u3/8D+8Rtv5/DwIA', 'error_code': 0, 'response_desc': 'SUCCESS'}

与我在stackoverflow上找到的所有其他问题不同,感兴趣的gzip压缩数据存在于json响应中。 json对象本身未压缩。我试过了

zlib.decompress(response.json().get("data"),15 + 32)

但是得到错误

    TypeError: a bytes-like object is required, not'str'

我是否正确处理解码?我看到有关解码gz文件的大量文档,但这只是一个gz压缩的字符串。

额外尝试:尝试

zlib.decompress(response.json().get("data").encode(), 16 + zlib.MAX_WBITS)

给我错误:

incorrect header checkk

2 个答案:

答案 0 :(得分:4)

这个答案归功于http://www.txtwizard.net/compression的作者:

事实证明,在使用@coldspeed在评论中建议的格式解压缩之前,需要先对base64进行解码。

zlib.decompress(base64.b64decode(response.json().get("data")), 16 + zlib.MAX_WBITS)

答案 1 :(得分:0)

首先需要将字符串转换为字节数组。这可以通过两种方式完成

bytes = bytes(your_string)

bytes = your_string.encode()