python pattern TypeError: Das JSON-Objekt muss str sein, nicht "Bytes".




python re error (3)

python3.6 + führt dies automatisch aus. Daher sollte Ihr Code keinen Fehler in python3.6 + zurückgeben

Was ist neu in Python3.6

Ich habe den folgenden, sehr grundlegenden Code, der wirft; TypeError: Das JSON-Objekt muss str sein, nicht "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 derselbe Fehler ausgegeben. jData = json.loads(myResponse.content).decode('utf-8')

Irgendwelche Vorschläge?


json.loads(myResponse.content.decode('utf-8'))

Sie haben es einfach in die falsche Reihenfolge gebracht, unschuldiger Fehler.

(Ausführliche Antwort). Wie von wim höflich erwähnt, konnten sie sich in einigen seltenen Fällen für UTF-16 oder UTF-32 entscheiden. Diese Fälle werden als Entwickler weniger häufig vorkommen. In diesem Szenario würde bewusst entschieden, wertvolle Bandbreite wegzuwerfen. Wenn Sie also Probleme mit der Kodierung haben, 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 Anfrage verwenden:

myResponse.json()

Oder Sie können sich für die Zeichenerkennung über chardet . Chardet ist eine auf einer Studie basierende Bibliothek. Die Bibliothek hat eine Funktion: detect . Detect kann die gängigsten Kodierungen erkennen und diese dann verwenden, um Ihre Zeichenfolge mit zu kodieren.

import chardet
json.loads(myResponse.content.decode(chardet.detect(myResponse.content)["encoding"]))

Lassen Sie Anfragen es für Sie entschlüsseln:

data = response.json()

Dadurch werden Kopfzeilen (Content-Type) und Antwortcodierung geprüft und automatisch erkannt, wie der Inhalt korrekt decodiert wird.





json