1、check_circular
类型:布尔值
默认:True
作用:如果为 True
,则在序列化时检查循环引用并抛出 ValueError
。如果为 False
,则不检查循环引用(不推荐关闭此选项,以避免无限递归)。
python
import json
data = {}
data['self'] = data # 创建循环引用
try:
json.dumps(data)
except ValueError as e:
print(f"Caught an error: {e}")
# 输出:Caught an error: Circular reference detected
```
2、allow_nan
类型:布尔值
默认:True
作用:如果为 True
,序列化 float('NaN')
, float('Infinity')
和 float('-Infinity')
为对应的 JSON 值 NaN
, Infinity
和 -Infinity
。如果为 False
,则会引发 ValueError
。
python
import json
data = {"value": float("inf")}
try:
json.dumps(data, allow_nan=False)
except ValueError as e:
print(f"Caught an error: {e}")
# 输出:Caught an error: Out of range float values are not JSON compliant
```
3、cls
类型:JSONEncoder
的子类
作用:指定一个自定义的 JSONEncoder 子类来进行序列化。
python
import json
class CustomEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, set):
return list(obj)
return super().default(obj)
data = {"tags": {"python", "coding"}}
json_str = json.dumps(data, cls=CustomEncoder)
print(json_str)
# 输出:{"tags": ["coding", "python"]}
```
4、default
类型:函数
作用:当 json.dumps()
遇到无法序列化的对象时,会调用此函数。此函数应返回一个可序列化的对象。
python
import json
import datetime
def default_handler(obj):
if isinstance(obj, datetime.datetime):
return obj.isoformat()
raise TypeError(f"Object of type {type(obj)} is not JSON serializable")
data = {"time": datetime.datetime.now()}
json_str = json.dumps(data, default=default_handler)
print(json_str)
# 输出:{"time": "2023-10-05T12:00:00"}
```
5、separators
类型:元组 (item_separator, key_separator)
默认:(',', ': ')
作用:控制项目分隔符和键-值分隔符。默认值会在键和值之间添加一个空格,使 JSON 更具可读性。
python
import json
data = {"name": "Alice", "age": 30}
json_str = json.dumps(data, separators=(',', ':'))
print(json_str) # 输出:{"name":"Alice","age":30} ```
6、sort_keys
类型:布尔值
默认:False
作用:如果为 True
,则按字母顺序对字典的键进行排序。
python
import json
data = {"b": 1, "a": 2, "c": 3}
json_str = json.dumps(data, sort_keys=True)
print(json_str)
# 输出:{"a": 2, "b": 1, "c": 3} ```
7、indent
类型:整数或字符串
作用:设置缩进的字符数或字符。为 None
时表示没有缩进;为整数时表示每层的空格数;为字符串时表示每层的这个字符串。
python
import json
data = {"name": "Alice", "age": 30}
json_str = json.dumps(data, indent=4)
print(json_str)
# 输出: # { # "name": "Alice", # "age": 30 # } ```
8、ensure_ascii
类型:布尔值
默认:True
作用:如果为 True
,则将非ASCII字符转义为 \uXXXX
形式。如果为 False
,则输出原始字符。
python
import json
data = {"name": "张三"}
json_str = json.dumps(data, ensure_ascii=False)
print(json_str)
# 输出:{"name": "张三"} ```
9、sort_keys
类型:布尔值
默认:False
python
import json
data = {"b": 1, "a": 2, "c": 3}
json_str = json.dumps(data, sort_keys=True)
print(json_str)
# 输出:{"a": 2, "b": 1, "c": 3} ```
作用:如果为 True
,则按字母顺序对字典的键进行排序。