Python json.dump和json.dumps的区别
1. json.dump()
json.dump()
是Python的JSON模块中的方法之一,用于将Python对象转换为JSON格式的字符串,并将其写入文件或可写对象中。下面是json.dump()
方法的语法:
json.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)
该方法接受以下参数:
obj
:要进行JSON编码的Python对象。fp
:写入文件中的文件对象或可写对象。skipkeys
:如果设置为True,字典键不是基本类型(str、int、float、bool、None)时,将被忽略而不是引发TypeError,默认为False。ensure_ascii
:如果为True(默认值),则所有非ASCII字符将被转义为Unicode序列,如果为False,则不会转义。check_circular
:如果为False(默认值),则不检查循环引用(例如,一个对象引用自身),如果为True,则在进行编码时检查循环引用。allow_nan
:如果为True(默认值),则允许JSON编码中的NaN、Infinity和-Infinity。如果为False,则会引发ValueError。cls
:用于自定义编码的JSONEncoder子类。indent
:如果指定为非负整数,则生成的JSON字符串将包含缩进和换行符,用于更易于阅读的格式化。可指定缩进类型(如空格数或制表符)。separators
:包含的元组指定单个项之间的分隔符和对象和键之间的分隔符,如(",", ":"
)。default
:一个函数,用于将非JSON可序列化类型转换为JSON序列化类型。sort_keys
:如果为True(默认False),则字典键将按照它们在哈希表中的顺序进行排序。
下面是一个使用json.dump()
的示例代码:
import json
data = {'name': 'John', 'age': 30, 'city': 'New York'}
with open('data.json', 'w') as f:
json.dump(data, f, indent=4)
print("JSON data is written to file")
运行这段代码后,文件data.json
将被创建并写入JSON格式的字符串:
{
"name": "John",
"age": 30,
"city": "New York"
}
2. json.dumps()
json.dumps()
也是Python的JSON模块中的方法之一,与json.dump()
类似,用于将Python对象转换为JSON格式的字符串。不同之处在于,json.dumps()
返回一个字符串,而不是将其写入文件或可写对象。下面是json.dumps()
方法的语法:
json.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)
json.dumps()
的参数与json.dump()
相同,仅缺少fp
参数。下面是一个使用json.dumps()
的示例代码:
import json
data = {'name': 'John', 'age': 30, 'city': 'New York'}
json_string = json.dumps(data, indent=4)
print(json_string)
运行这段代码后,输出结果将是一个格式化的JSON字符串:
{
"name": "John",
"age": 30,
"city": "New York"
}
3. json.load()
json.load()
是Python的JSON模块中的方法之一,用于从文件或可读对象中加载JSON数据,并将其解析为Python对象。下面是json.load()
方法的语法:
json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
json.load()
接受以下参数:
fp
:读取JSON数据的文件对象或可读对象。cls
:用于自定义解码的JSONDecoder子类。object_hook
:用于将JSON对象转换为Python对象的函数。parse_float
:用于将JSON浮点值转换为Python浮点值的函数。parse_int
:用于将JSON整数值转换为Python整数值的函数。parse_constant
:使用此函数将特殊的JSON常量(如NaN)转换为Python类型。object_pairs_hook
:用于将JSON对象转换为Python对象的函数。
下面是一个使用json.load()
的示例代码:
import json
with open('data.json', 'r') as f:
data = json.load(f)
print(data)
假设文件data.json
中包含以下JSON数据:
{
"name": "John",
"age": 30,
"city": "New York"
}
该代码将读取文件中的JSON数据,并将其解析为Python对象。然后,数据将被打印出来:
{'name': 'John', 'age': 30, 'city': 'New York'}
4. json.loads()
json.loads()
是Python的JSON模块中的方法之一,与json.load()
类似,用于将JSON格式的字符串解析为Python对象。不同之处在于,json.loads()
接受的参数是一个字符串,而不是文件对象或可读对象。下面是json.loads()
方法的语法:
json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
json.loads()
的参数与json.load()
相同,只是将fp
换成了s
,表示要解析的JSON字符串。下面是一个使用json.loads()
的示例代码:
import json
json_string = '''
{
"name": "John",
"age": 30,
"city": "New York"
}
'''
data = json.loads(json_string)
print(data)
运行这段代码后,输出结果将是一个Python对象:
{'name': 'John', 'age': 30, 'city': 'New York'}
当然,如果JSON格式的字符串不正确,或者其中包含无法解析的内容,将引发json.JSONDecodeError
异常。
综上所述,json.dump()
和json.dumps()
的区别在于,前者将Python对象写入文件或可写对象中,而后者将Python对象转换为JSON格式的字符串并返回。同样,json.load()
和json.loads()
的区别在于,前者将JSON数据从文件或可读对象中加载并解析为Python对象,而后者将JSON格式的字符串解析为Python对象。