Python读取json文件时报错:TypeError:the Json object must be str, bytes or bytearray,not ‘TextIOWrapper’

最新推荐文章于 2022-11-11 09:34:44 发布
最新推荐文章于 2022-11-11 09:34:44 发布 阅读量1.1w

利用Python中的json库读取json文件时,因为错误使用了相应的方法导致报错:TypeError:the Json object must be str, bytes or bytearray,not‘TextIOWrapper’。

首先要弄明白json库的四个方法:dumps和loads、dump和load。 其中,dumps和loads是在内存中转换(python对象和json字符串之间的转换),而dump和load则是对应于文件的处理 ;下面的函数说明中已经很清楚的说明了这一点。

出现这个错误的原因是自己用了loads方法去将json文件转换为python对象,而正确的应该是使用load方法。

json的主要方法的部分源码

  • Serialize :序列化:将对象转化为对应的字符串。
  • 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数据,然后转化为json对象(实际到内存)。

# 1.打开一个本地json文件
data = open("./a.json", encoding='utf-8')
# 反序列化,转换为python对象
result = json.load(data)
print(result)
# 2.获取在线的json数据(王者荣耀英雄列表的json数据)
json_url = 'https://pvp.qq.com/web201605/js/herolist.json'
# 获取该json数据的文本(字符串)
text = requests.get(json_url).text
print(text)
# 反序列化,转换为python对象
result = json.loads(text)

部分内容参考:https://blog.csdn.net/NOT_GUY/article/details/80954328

Python读取json文件时报错:TypeError:the Json object must be str, bytes or bytearray,not ‘TextIOWrapper’ 主要涉及到Python的json库的四个方法:dumps和loads、dump和load的应用。
利用python中的json读取json文件,出现错误:TypeError:the Json object must be str, bytes or bytearray,not‘TextIOWrapper’。 解决方法:json有四个方法:dumps和loads、dump和load。其中,dumps和loads是在内存中转换(python对象和json字符串之间的转换),而dump和load则...
Exception has occurred: TypeError the JSON object must be str, bytes or bytearray, not TextIOWrapper File “/Users/a/exp.py”, line 8, in json_object = json.loads(open(filedir)) json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 这一般是jso
示例1:json_file=’/home/mashagua/my_pycharm/hr_plot/data/address.json’ with open(json_file,‘r’) as jf: data=json.loads(jf) 错误1:TypeError: the JSON object must be str, bytes or bytearray, not ‘TextIOWrapp...
Traceback (most recent call last): File "/home/admin/apps/*-*-sync/task/__init__.py", line 114, in run for data in self.index_data(): File "/home/admin/apps/*-*-sync/task/huahuo/*_*_sync.py", line 72, in index_data data = self.make_field_true(r
python错误: TypeError: the JSON object must be str, bytes or bytearray, not 'dict'解决办法
with open('dict_author_id.json', 'r') as f: data = json.loads(f) print(data["R. Lauterbach"]) 然后报错了,错误信息为: Traceback (most recent call last):
这个错误是因为在导入Python json包,调用json.dump/dumps函数,可能会遇到TypeError: Object of type xxx is not JSON serializable错误,也就是无法序列化某些对象格式。 解决办法: 点击进去json的包,然后在其中添加MyEncoder,把原来的JsonEncoder给替换掉。 因为我还需要定义间的序列格式,所以我的MyEncoder可能比较万能,大家自己根据需要自己修改。 1.首先json包内定义类MyEncoder #我自己重新
### 回答1: 这个错误提示是因为传入的参数类型不正确,应该是字符串、字节或字节数组,而不是文本IO包装器。可能是在读取文件没有正确地打开文件或者没有将读取的内容转换为字符串。需要检查代码中的文件读取部分,确保正确地打开文件并将读取的内容转换为字符串。 ### 回答2: JSON是一种用于数据交换的轻量级数据格式,Python中可以使用json模块来处理JSON数据。当我们从文件读取JSON数据,会出现这样的错误:TypeError: the json object must be str, bytes or bytearray, not TextIOWrapper。 这个错误提示告诉我们,JSON对象必须是字符串(str)、字节(bytes)或字节数组(bytearray)类型的数据,而不是文本I/O包装器(TextIOWrapper)类型的数据。 具体来说,这个错误通常是由于我们在使用json.load()或json.loads()函数,将文件对象作为参数传入,而不是文本或字节数组数据。因此,我们需要在读取文件之后,显式地将其转换为字符串类型,然后再通过json模块来解析JSON数据。 可以使用以下代码进行文件内容读取JSON解析: import json # 打开文件,并读取内容 with open('data.json', 'r') as file: content = file.read() # 解析JSON数据 data = json.loads(content) 以上代码中,我们使用了with语句来打开文件读取内容,并将其存储在变量content中。我们随后使用json.loads()函数将内容解析为JSON数据,最后将解析后的数据存储在变量data中。 总之,当我们在处理JSON数据,必须确保我们的数据对象是字符串(str)、字节(bytes)或字节数组(bytearray)类型的数据,并且要注意不要将文本I/O包装器类型的数据作为参数传入JSON解析函数中。 ### 回答3: 这个错误是由于在尝试对一个文本IO对象进行JSON编码出现的。文本IO对象是一种与文件相关的对象,可以读取和写入文本内容。在Python中,当我们需要将一个对象编码为JSON字符串并写入文件,我们需要使用open函数打开文件并将其传递给json.dump方法。但是,如果我们在打开文件没有指定文件模式(默认为'r'模式,即只读模式),那么当我们尝试写入文件,就会出现“textiowrapper”错误。 要解决这个错误,我们应该确保我们在打开文件指定了正确的文件模式。例如,如果我们需要读取并准备写入JSON数据的文件,我们可以使用以下代码: import json with open('data.json', 'r') as f: data = json.load(f) # 修改数据 # ...... with open('data.json', 'w') as f: json.dump(data, f) 在这个例子中,我们首先使用' r'模式打开文件,以将其读取到内存中,并将JSON数据解码为Python对象。接下来,我们修改了这些数据,然后使用' w'模式重新打开同一个文件,这次我们将其指定为可写模式。 除了使用正确的文件模式,我们还可以将文本IO对象转换为字符串或字节字符串对象。例如,如果我们需要将一个文本IO对象编码为JSON字符串,我们可以使用: import json import io f = io.StringIO() f.write('{"name": "John", "age": 30}') f.seek(0) data = json.load(f) 这里,我们使用io.StringIO()创建一个文本IO对象,并使用f.write()将JSON字符串写入该对象。接下来,我们使用f.seek(0)将读写器的位置重置为文件的开头,以便我们可以使用json.load()将JSON解码为Python对象。 总的来说,TypeError: the JSON object must be strbytes or bytearray,not textiowrapper是由于我们尝试将文本IO对象编码为JSON字符串出现的。要解决这个错误,我们应该确保我们在打开文件指定正确的文件模式或将文本IO对象转换为字符串或字节字符串对象。