对于noob问题感到抱歉,但需要帮助解析我在发布请求后收到的HTTP响应。
有例子:
import requests
import json
import base64
url = 'someURL'
if __name__=='__main__':
data = '{"requests":"data"}'
r = requests.post(url, data)
print(r.content)
print(r.encoding)
我收到了下一个:
b'{“结果”:[{“命中”:[{“别名”:[“古人的防御” 2“,”古人的防御2“,”\ xe0 \ xbc \ xbc \ xe3 \ x81 \ xa4 \ XE2 \ X97 \ x95_ \ XE2 \ X97 \ X95 \ xe0 \ XBC \ XBD \ XE3 \ X81 \ XA4 “],” 本地化 “:{},” 姓名 “:” 的Dota 2" , “流行度”:36184 “的objectID”: “29595”, “ highlightResult”:{ “别名”:[{ “值”:“防御 古人 2“,”matchLevel“:”none“,”matchedWords“:[]},{”value“:”the Defense of the the 古人 2" , “matchLevel”: “无”, “matchedWords”:[]},{ “值”:“\ xe0 \ XBC \ XBC \ xe3 \ x81 \ xa4 \ xe2 \ x97 \ x95 \ xe2 \ x97 \ x95 \ xe0 \ XBC \ XBD \ XE3 \ X81 \ XA4" , “matchLevel”: “无”, “matchedWords”:[]}], “姓名”:{ “值”:“ Dota的 2" , “matchLevel”: “满”, “fullyHighlighted”:假 “matchedWords”:[ “DOTA”]}}},{ “别名”:[“暴雪 全明星“,”暴雪DOTA“,”HOTS“],”本地化“:{},”名称“:”英雄 的 风暴 “ ”人气“:27143, ”的objectID“: ”32959“, ”_ highlightResult“:{ ”别名“:[{ ”值“:” 暴雪 所有星 “ ”matchLevel“: ”无“, ”matchedWords“:[]},{ ”值“:” 暴雪 DOTA “ ”matchLevel“: ”满“, ”fullyHighlighted“:假 ”matchedWords“:[ ”DOTA“]},{ ”值“: ”HOTS“, ”matchLevel“:” 无“ ”matchedWords“:[]}], ”姓名“:{ ”值“:” 英雄 的 风暴 “ ”matchLevel“: ”无“, ”matchedWords“:[]}}},{ ”别名“:[], ”本地化“:{}, ”姓名“:” 藤子 F. Fujio人物Daishuugou! SF Dotabata 党! “ ”人气“:0 ”的objectID“: ”490150“, ”_ highlightResult“:{ ”名“:{ ”值“:” 藤子 F. Fujio人物Daishuugou! SF Dota bata 党!”, “matchLevel”: “满”, “fullyHighlighted”:假的, “matchedWords”: “DOTA”]}}},{ “别名”:[], “本地化”:{}, “名” :“\ xe5 \ X88 \ X80 \ xe5 \ XA1 \ X94 \ xe5 \ X82 \ XB3 \ xe5 \ xa5 \的x87 刀塔 传奇 “ ”人气“:0 ”的objectID“: ”488497“, ”_ highlightResult“:{ ”名“:{ ”值“:” \ xe5 \ X88 \ X80 \ xe5 \ XA1 \ X94 \ xe5 \ X82 \ XB3 \ xe5 \ xa5 \的x87 Dota的 传奇 “ ”matchLevel“: ”满“, ”fullyHighlighted“:假 ”matchedWords“:[ ”DOTA“]}}}], ”nbHits“:4, ”页“:0, ”nbPages“:1,” hitsPerPage “:1000,” processingTimeMS “:1,” 小面 “:{},” exhaustiveFacetsCount “:真” exhaustiveNbHits “:真,” 查询 “:” DOTA “ ”PARAMS“:” 查询= DOTA&安培;页= 0&安培; hitsPerPage = 99999&安培; numericFilters =%5B%5D&安培;小面= *&安培; facetFilters =”, “索引”: “游戏”}]} \ N'
UTF-8
但我如何尝试编码,格式化它仍然有不同的问题。请帮忙,这个请求如何获得有效的json?
有我的BAD例子:
print(j.json())
Traceback (most recent call last):
File "./get_games.py", line 14, in <module>
print(r.json())
UnicodeEncodeError: 'ascii' codec can't encode character '\u0f3c' in position 95: ordinal not in range(128)
或者这个:
json.loads(str(r.content)[1:])
Traceback (most recent call last):
File "./get_games.py", line 17, in <module>
a = json.loads(str(r.content)[1:])
File "/usr/lib/python3.6/json/__init__.py", line 354, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.6/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.6/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
由于
答案 0 :(得分:0)
您的报告中有些奇怪,因为打印j.json()
会导致r.json()
出现错误....
如果您没有使用str()
进行隐式解码,那么您的第二次尝试就会奏效。
尝试明确,完全冗长的方式:
print(json.loads(r.content.decode(r.encoding)))