Ich habe den folgenden, sehr einfachen Code, der wirft; TypeError: the JSON object must be str, not 'bytes'
import requests
import json
url = 'my url'
user = 'my user'
pwd = 'my password'
response = requests.get(url, auth=(user, pwd))
if(myResponse.ok):
Data = json.loads(myResponse.content)
Ich versuche, die Dekodierung wie folgt auf die Datenvariable zu setzen, aber es wird der gleiche Fehler ausgegeben. jData = json.loads(myResponse.content).decode('utf-8')
Irgendwelche Vorschläge?
Antworten:
json.loads(myResponse.content.decode('utf-8'))
Du hast es einfach in die falsche Reihenfolge gebracht, unschuldiger Fehler.
(Ausführliche Antwort). Wie von wim höflich hervorgehoben, konnten sie sich in einigen seltenen Fällen für UTF-16 oder UTF-32 entscheiden. Diese Fälle sind weniger häufig als die Entwickler. In diesem Szenario würden sie sich bewusst dafür entscheiden, wertvolle Bandbreite wegzuwerfen. Wenn Sie also auf Codierungsprobleme stoßen, können Sie utf-8 in 16, 32 usw. ändern.
Hierfür gibt es einige Lösungen. Sie können die integrierte
.json()
Funktion der Anforderung verwenden:Oder Sie können sich für die Zeichenerkennung über entscheiden
chardet
. Chardet ist eine Bibliothek, die auf der Grundlage einer Studie entwickelt wurde. Die Bibliothek hat eine Funktion :detect
. Detect kann die meisten gängigen Codierungen erkennen und diese dann zum Codieren Ihrer Zeichenfolge verwenden.import chardet json.loads(myResponse.content.decode(chardet.detect(myResponse.content)["encoding"]))
quelle
Lassen Sie Anfragen es für Sie entschlüsseln:
Dadurch werden die Header (Inhaltstyp) und die Antwortcodierung überprüft und automatisch erkannt, wie der Inhalt korrekt dekodiert wird.
quelle
python3.6 + erledigt dies automatisch. Ihr Code sollte also keinen Fehler in python3.6 + zurückgeben
Was ist neu in Python3.6?
quelle