目录
The JSON object must be str, bytes or bytearray, not dict
- JSON 对象必须是 str、bytes 或 bytearray,不能是 DICT
- JSON 对象必须是 str 或 bytes 而不是 TextIOWrapper
- JSON 对象必须是 str、bytes 或 bytearray,而不是 LIST
- JSON 对象必须是 str、bytes 或 bytearray 而不是 RESPONSE
确保根据您的错误消息单击正确的副标题
JSON对象必须是str、bytes或bytearray,不能是dict
当我们将字典传递给该方法时,会出现 Python“TypeError: the JSON object must be str, bytes or bytearray, not dict” json.loads()
。
要解决该错误,如果尝试将 dict 转换为 JSON 字符串,请删除对 的调用json.loads()
并使用该
方法。json.dumps()
下面是错误如何发生的示例。
import json my_dict = {'name': 'Bobby Hadz', 'age': 30} # ⛔️ TypeError: the JSON object must be str, bytes or bytearray, not dict result = json.loads(my_dict)
json.loads方法将 JSON 字符串解析为本机 Python 对象。
json.loads()
。将字典转换为 JSON 字符串
如果需要将字典转换为 JSON 字符串,请使用该json.dumps()
方法。
import json my_dict = {'name': 'Bobby Hadz', 'age': 30} my_json_str = json.dumps(my_dict) print(my_json_str) # 👉️ '{"name": "Bobby Hadz", "age": 30}' print(type(my_json_str)) # 👉️ <class 'str'>
json.dumps方法将 Python 对象转换为 JSON 格式的字符串。
换句话说,如果您需要将 JSON 字符串解析为原生 Python 对象,则必须使用该json.loads()
方法。
将 JSON 字符串转换为原生 Python 对象
如果需要将 Python 对象转换为 JSON 字符串,则必须使用 方法
json.dumps()
。
import json json_str = r'{"name": "Alice", "age": 30}' # ✅ parse JSON string to Python native dict my_dict = json.loads(json_str) print(type(my_dict)) # 👉️ <class 'dict'> # ✅ convert Python native dict to a JSON string my_json_str = json.dumps(my_dict) print(type(my_json_str)) # 👉️ <class 'str'>
该json.loads()
方法帮助我们从 JSON 字符串加载 Python 本机对象(例如字典或列表)。
使用该json.load
方法从 JSON 文件中读取
如果需要读取 JSON 文件,请使用该json.load()
方法。
import json file_name = 'example.json' with open(file_name, 'r', encoding='utf-8') as f: my_data = json.load(f) print(my_data) # 👉️ {'name': 'Alice', 'age': 30} print(my_data['name']) # 👉️ 'Alice' print(type(my_data)) # 👉️ <class 'dict'>
上面的代码示例假定您example.json
在同一目录中有一个文件。
{"name": "Alice", "age": 30}
json.load方法用于将文件反序列化为 Python 对象,而
json.loads方法用于将 JSON 字符串反序列化为 Python 对象。
该json.load()
方法需要一个包含实现方法的 JSON 文档的文本文件或二进制文件.read()
。
open()
如果您使用不带
with 语句的函数,这里是等效的示例。
import json file_name = 'example.json' json_file = open(file_name, 'r', encoding='utf-8') json_data = json.load(json_file) print(json_data) # 👉️ {'name': 'Alice', 'age': 30} print(json_data['name']) # 👉️ 'Alice' print(type(json_data)) # 👉️ <class 'dict'> json_file.close()
代码示例实现了相同的结果,但使用了
不带语句的open() 函数with
。
该with
语句负责为我们自动关闭文件,但是当open()
直接使用该函数时,我们必须手动关闭文件。
您可以将以下 Python 对象转换为 JSON
该类JSONEncoder
默认支持以下对象和类型。
Python | JSON |
---|---|
字典 | 目的 |
列表,元组 | 大批 |
海峡 | 细绳 |
int、float、int 和 float 派生枚举 | 数字 |
真的 | 真的 |
错误的 | 错误的 |
没有任何 | 无效的 |
如果您不确定变量存储的对象类型,请使用内置类
type()
。
my_dict = {'name': 'Alice', 'age': 30} print(type(my_dict)) # 👉️ <class 'dict'> print(isinstance(my_dict, dict)) # 👉️ True my_str = 'hello world' print(type(my_str)) # 👉️ <class 'str'> print(isinstance(my_str, str)) # 👉️ True
类型
类
返回对象的类型。
如果传入的对象是传入类的实例或子类,则isinstance函数返回
。True
目录
- JSON 对象必须是 str 或 bytes 而不是 TextIOWrapper
- JSON 对象必须是 str、bytes 或 bytearray,而不是 LIST
- JSON 对象必须是 str、bytes 或 bytearray 而不是 RESPONSE
JSON 对象必须是 str 或 bytes 而不是 TextIOWrapper
当我们将文件对象传递给该方法时,会出现 Python“TypeError: the JSON object must be str, bytes or bytearray, not TextIOWrapper” json.loads()
。
要解决该错误,请将文件对象传递给json.load()
该方法。
Traceback (most recent call last): File "/home/borislav/Desktop/bobbyhadz_python/main.py", line 7, in <module> my_data = json.loads(f) ^^^^^^^^^^^^^ File "/usr/lib/python3.11/json/__init__.py", line 339, in loads raise TypeError(f'the JSON object must be str, bytes or bytearray, ' TypeError: the JSON object must be str, bytes or bytearray, not TextIOWrapper
下面是错误如何发生的示例。
import json file_name = 'example.json' with open(file_name, 'r', encoding='utf-8') as f: # ⛔️ TypeError: the JSON object must be str, bytes or bytearray, not TextIOWrapper my_data = json.loads(f)
使用该json.load()
方法反序列化一个JSON文件
我们不能将文件对象直接传递给该json.loads()
方法,但我们可以使用该json.load()
方法将文件反序列化为 Python 对象。
import json file_name = 'example.json' with open(file_name, 'r', encoding='utf-8') as f: my_data = json.load(f) print(my_data) # 👉️ {'name': 'Alice', 'age': 30} print(type(my_data)) # 👉️ <class 'dict'>
该代码示例假定您example.json
在同一目录中有一个文件。
{"name": "Alice", "age": 30}
json.load方法用于将文件反序列化为 Python 对象,而
json.loads方法用于将 JSON 字符串反序列化为 Python 对象。
该json.load()
方法需要一个包含实现方法的 JSON 文档的文本文件或二进制文件.read()
。
手动调用file.read()
方法json.loads()
或者,您手动调用read()
文件对象上的方法并使用该json.loads()
方法。
import json file_name = 'example.json' with open(file_name, 'r', encoding='utf-8') as f: # 👇️ make sure to call read() my_data = json.loads(f.read()) print(my_data) # 👉️ {'name': 'Alice', 'age': 30} print(type(my_data)) # 👉️ <class 'dict'>
上面的示例实现了相同的结果。
但是,我们不是依靠json.load()
方法为我们调用read()
文件对象,而是手动执行并使用该json.loads()
方法。
如果需要将 JSON 字符串解析为原生 Python 对象,则必须使用该json.loads()
方法。
如果需要将 Python 对象转换为 JSON 字符串,则必须使用该
json.dumps()
方法。
import json json_str = r'{"name": "Alice", "age": 30}' # ✅ parse JSON string to Python native dict my_dict = json.loads(json_str) print(type(my_dict)) # 👉️ <class 'dict'> # ✅ convert Python native dict to a JSON string my_json_str = json.dumps(my_dict) print(type(my_json_str)) # 👉️ <class 'str'>
该json.loads()
方法主要帮助我们从 JSON 字符串加载 Python 本机对象(例如字典或列表)。
该类JSONEncoder
默认支持以下对象和类型。
Python | JSON |
---|---|
字典 | 目的 |
列表,元组 | 大批 |
海峡 | 细绳 |
int、float、int 和 float 派生枚举 | 数字 |
真的 | 真的 |
错误的 | 错误的 |
没有任何 | 无效的 |
检查变量存储的类型
如果您不确定变量存储的对象类型,请使用内置类
type()
。
my_dict = {'name': 'Alice', 'age': 30} print(type(my_dict)) # 👉️ <class 'dict'> print(isinstance(my_dict, dict)) # 👉️ True my_str = 'hello world' print(type(my_str)) # 👉️ <class 'str'> print(isinstance(my_str, str)) # 👉️ True
类型
类
返回对象的类型。
如果传入的对象是传入类的实例或子类,则isinstance函数返回
。True
目录
JSON对象必须是str、bytes或bytearray,不能是list
The Python “TypeError: the JSON object must be str, bytes or bytearray, not
list” occurs when we pass a list to the json.loads()
method.
To solve the error, remove the call to json.loads()
and use the
json.dumps()
method if trying to convert the list to a JSON string.
Here is an example of how the error occurs.
import json my_list = ['Alice', 'Bob', 'Carl'] # ⛔️ TypeError: the JSON object must be str, bytes or bytearray, not list result = json.loads(my_list)
The json.loads method parses a JSON
string into a native Python object.
json.loads()
method.# Converting the list to a JSON string
If you need to convert a list to a JSON string, use the json.dumps()
method.
import json my_list = ['Alice', 'Bob', 'Carl'] my_json_str = json.dumps(my_list) print(my_json_str) # 👉️ '["Alice", "Bob", "Carl"]' print(type(my_json_str)) # 👉️ <class 'str'>
The json.dumps method converts a Python
object to a JSON formatted string.
If you need to parse a JSON string to a native Python object, you have to use
the json.loads()
method.
If you need to convert a Python object to a JSON string, you have to use the
json.dumps()
method.
import json json_str = r'["Alice", "Bob", "Carl"]' my_list = json.loads(json_str) print(type(my_list)) # 👉️ <class 'list'> my_json_str = json.dumps(my_list) print(type(my_json_str)) # 👉️ <class 'str'>
The json.loads()
method basically helps us load a Python native object (e.g. a
list or a dictionary) from a JSON string.
# Reading a list from a JSON file
If you need to read from a JSON file, use the json.load()
method.
import json file_name = 'example.json' with open(file_name, 'r', encoding='utf-8') as f: my_data = json.load(f) print(my_data) # 👉️ ['Alice', 'Bob', 'Carl'] print(my_data[0]) # 👉️ 'Alice' print(type(my_data)) # 👉️ <class 'list'>
The code sample above assumes that you have an example.json
file in the same
directory.
["Alice", "Bob", "Carl"]
The json.load method is
used to deserialize a file to a Python object, whereas the
json.loads method is used to
deserialize a JSON string to a Python object.
The json.load()
method expects a text file or a binary file containing a JSON
document that implements a .read()
method.
The JSONEncoder
class supports the following objects and types by default.
Python | JSON |
---|---|
dict | object |
list, tuple | array |
str | string |
int, float, int and float derived Enums | number |
True | true |
False | false |
None | null |
# Checking the type of a variable
If you aren’t sure what type of object a variable stores, use the built-in
type()
class.
my_list = ['a', 'b', 'c'] print(type(my_list)) # 👉️ <class 'list'> print(isinstance(my_list, list)) # 👉️ True my_str = 'hello' print(type(my_str)) # 👉️ <class 'str'> print(isinstance(my_str, str)) # 👉️ True
The
type
class returns the type of an object.
The isinstance function returns
True
if the passed-in object is an instance or a subclass of the passed-in
class.
# The JSON object must be str, bytes or bytearray not Response
The Python “TypeError: the JSON object must be str, bytes or bytearray, not
Response” occurs when we pass a Response
object to the json.loads()
method.
To solve the error, call the json()
method on the Response
object instead,
e.g. result = res.json()
.
Here is an example of how the error occurs.
import json import requests def make_request(): res = requests.get('https://reqres.in/api/users') # ⛔️ TypeError: the JSON object must be str, bytes or bytearray, not Response parsed = json.loads(res) make_request()
We passed a Response
object to the json.loads()
method which caused the
error.
# Use the json()
method to parse the response
To solve the error, use the json()
method on the response object instead.
import requests def make_request(): res = requests.get('https://reqres.in/api/users') # ✅ call .json() method on Response object parsed = res.json() print(parsed) print(type(parsed)) # 👉️ <class 'dict'> make_request()
json()
method on the Response
object to parse it into a native Python object before accessing any of its keys.You should use the json()
method to parse the data from all requests, not just
HTTP GET
.
# Making an HTTP Post request with the requests
module
Here is an example of a POST request with the requests
module.
import requests def make_request(): res = requests.post( 'https://reqres.in/api/users', data={'name': 'John Smith', 'job': 'manager'} ) # ✅ parse JSON response to native Python object data = res.json() # 👇️ {'name': 'John Smith', 'job': 'manager', 'id': '649', 'createdAt': '2022-05-20T10:11:23.939Z'} print(data) print(data['name']) # 👉️ "John Smith" print(data['job']) # 👉️ "manager" print(data['id']) # 649 make_request()
If you are working with a JSON string or a native Python object, make sure to
use the json.loads()
and json.dumps()
methods.
If you need to parse a JSON string to a native Python object, you have to use
the json.loads()
method.
If you need to convert a Python object into a JSON string, you have to use the
json.dumps()
method.
import json json_str = r'{"name": "Alice", "age": 30}' # ✅ parse JSON string to Python native dict my_dict = json.loads(json_str) print(type(my_dict)) # 👉️ <class 'dict'> # ✅ convert Python native dict to a JSON string my_json_str = json.dumps(my_dict) print(type(my_json_str)) # 👉️ <class 'str'>
The json.loads()
method basically helps us load a Python native object (e.g. a
dictionary or a list) from a JSON string.
The json.dumps method converts a Python
object to a JSON formatted string.
The JSONEncoder
class supports the following objects and types by default.
Python | JSON |
---|---|
dict | object |
列表,元组 | 大批 |
海峡 | 细绳 |
int、float、int 和 float 派生枚举 | 数字 |
真的 | 真的 |
错误的 | 错误的 |
没有任何 | 无效的 |
检查变量的类型
如果您不确定变量存储的对象类型,请使用内置类
type()
。
my_dict = {'name': 'Alice', 'age': 30} print(type(my_dict)) # 👉️ <class 'dict'> print(isinstance(my_dict, dict)) # 👉️ True my_str = 'hello world' print(type(my_str)) # 👉️ <class 'str'> print(isinstance(my_str, str)) # 👉️ True
类型
类
返回对象的类型。
如果传入的对象是传入类的实例或子类,则isinstance函数返回
。True