Pythonはjsonファイルを与えられて読み取られます:TypeError:Jsonオブジェクトは 'TextIOWrapper'ではなくstr、bytesまたはbytearrayでなければなりません



Python Is Read Being Given Json File



記事のディレクトリ


問題

Pythonでjsonjsonライブラリを使用してファイルを読み取る場合、メソッドを誤って使用すると対応するエラーが発生するため、次のエラーが発生します。TypeError:Jsonオブジェクトは「TextIOWrapper」ではなくstr、bytes、またはbytearrayである必要があります。

分析

まず、jsonライブラリの4つのメソッド、ダンプとロード、ダンプとロードを理解する必要があります。 ここで、ダンプとロードはメモリ内の変換(pythonとjsonの文字列オブジェクト間)であり、ダンプのロードはプロセスに対応するファイルです。 以下の機能説明は、この点を明確に示しています。



このエラーは、ファイルをpythonjsonオブジェクトに変換するためにメソッドを使用したロードが原因で発生します。権利はloadメソッドを使用する必要があります。

メソッドjsonのソースコードの主要部分

説明:



  • Serialize:Serialization:オブジェクトは対応する文字列に変換されます。
  • Deserialize:deserialize:オブジェクトに対応する文字列を変換します。

機能説明ソースコード(導入されたパラメーターを除き、独自のソースコードを確認する必要があります):

def dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw): '''Serialize ``obj`` as a JSON formatted stream to ``fp`` (a ``.write()``-supporting file-like object). ''' def dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw): '''Serialize ``obj`` to a JSON formatted ``str``. ''' def load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw): '''Deserialize ``fp`` (a ``.read()``-supporting file-like object containing a JSON document) to a Python object. ''' def loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw): '''Deserialize ``s`` (a ``str``, ``bytes`` or ``bytearray`` instance containing a JSON document) to a Python object. '''

例えば

次のコードは、最初にローカルファイルを読み取り、次にターゲットのjson jsonの2行目に変換してデータを取得し、次にjsonオブジェクト(実メモリー)に変換します。

# 1. Open a local json file data = open('./a.json', encoding='utf-8') # Deserialization, the object is converted into python result = json.load(data) print(result) # 2. Get online json data (the king of glory hero list json data) json_url = 'https://pvp.qq.com/web201605/js/herolist.json' # Json acquire the text data (character string) text = requests.get(json_url).text print(text) # Deserialization, the object is converted into python result = json.loads(text)

パーツリファレンス: https://blog.csdn.net/NOT_GUY/article/details/80954328