Python3 json模块之编码解码方法讲解
什么是JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它是基于JavaScript的一个子集。JSON采用完全独立于语言的文本格式,这使得它非常适合于数据的传输。同时,JSON的格式也非常易于人阅读和编写,也容易被机器解析和生成。在Web应用中,JSON由于它的易读性和轻量性已经逐渐取代了XML成为主流的数据交换格式。
JSON在Python中的使用
Python中内置的json模块提供了对JSON的编码和解码的支持。 使用该模块可以将Python对象转换为JSON格式,并且可以将JSON格式的数据转换为Python对象。
编码
在Python中,我们可以通过json模块的dumps()方法将Python对象序列化成JSON文本。以下是dumps()方法的详细说明:
json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding='utf-8', default=None, sort_keys=False, **kw)
其中参数说明如下:
- obj:要进行编码的Python对象,通常为字典或列表。
- skipkeys:如果指定为True,则遇到非Python原生支持类型数据时,会自动跳过这些键值对,默认为False。
- ensure_ascii:一个可选的参数,默认情况下,编码会把中文输出成ASCII码通过\uXXXX方式来表示。如果ensure_ascii为False,则编码的输出结果会是中文字符而非\uXXXX的形式。
- check_circular:一个可选的布尔参数,可以指定是否检查循环引用。如果对象中存在循环引用,json.dumps()将抛出一个异常,防止无限递归导致堆栈溢出。
- allow_nan:该参数可以指定是否允许NaN、Infinity或者-Infinity等超出Python float类型范围的数字类型。默认情况下,不允许存在该种数据类型,如果遇到异常会抛出一个ValueError。当然,你也可以返回支持JSON的无穷大或NaN浮点数格式的JSON字符串。要支持该功能,只需要设置allow_nan为False即可。
- cls:如果指定,则转换转json对象时会调用cls提供的方法,通常情况下,cls是json.JSONEncoder的子类。
- indent:一个可选的整数参数,可以指定JSON数据缩进的长度。
- separators:一个可选的字符流,它指定分隔符,缺省值(',', ':'),分别为逗号和冒号。如果指定该参数为(",",": "),则生成的JSON数据更容易阅读, 输出格式也更加美观。
- encoding:指定编码格式,比如'utf-8'。
- default:处理自定义类型数据的函数,会将Python自定义类型的数据转换为JSON数据,通常情况下,需要通过default参数来指定转换函数。
下面是一个将Python字典对象转换为JSON字符串的例子:
import json
# Python字典对象
data = {
'name': 'Bob',
'age': 22,
'gender': 'male'
}
# 将Python字典对象转换为JSON字符串
json_str = json.dumps(data)
print(json_str)
输出结果:
{"name": "Bob", "age": 22, "gender": "male"}
解码
在Python中,我们可以通过json模块的loads()方法将JSON字符串解码为Python对象。以下是loads()方法的详细说明:
json.loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, strict=True, **kw)
其中参数说明如下:
- s:要进行解码的JSON字符串。
- encoding:指定编码格式,比如'utf-8'。
- cls:如果指定,则转换转Python对象时会调用cls提供的方法,通常情况下,cls是json.JSONDecoder的子类。
- object_hook:一个可选的函数,调用该函数可以将JSON字符串转为Python对应的值。例如一个JSON格式的字符串,包含一个自定义的类Example,通过指定object_hook,可以讲JSON字符串转换为Python的Example对象。通常情况下,需要通过default参数来指定转换函数。
- parse_float:一个可选的函数,将字符串格式的json数据传入此函数进行返回一个浮点型数据,例如
lambda x: float(x)
- strict:该参数可以指定是否遵循json语法规范。如果strict为False,则可以解码非严格格式的JSON,也就是Python转换成JSON的过程中遵循的是JS的语法规范(ECMA-262)。如果strict为True,则将会只能解码严格JSON格式。
下面是一个将JSON字符串转换为Python字典对象的例子:
import json
# JSON字符串
json_str = '{"name": "Bob", "age": 22, "gender": "male"}'
# 将JSON字符串转换为Python对象
data = json.loads(json_str)
print(data)
输出结果:
{'name': 'Bob', 'age': 22, 'gender': 'male'}
示例
示例1:将Python对象转换为JSON字符串
import json
# Python字典对象
data = {
"name": "John",
"age": 30,
"city": "New York"
}
# 将Python字典对象转换为JSON字符串
json_str = json.dumps(data)
print(json_str)
输出结果:
{"name": "John", "age": 30, "city": "New York"}
示例2:将JSON字符串转换为Python对象
import json
# JSON字符串
json_str = '{"name": "John", "age": 30, "city": "New York"}'
# 将JSON字符串转换为Python对象
data = json.loads(json_str)
# 输出转换后的Python对象
print(data)
输出结果:
{'name': 'John', 'age': 30, 'city': 'New York'}
以上就是关于Python3中使用json模块进行编码和解码的方法讲解。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python3 json模块之编码解码方法讲解 - Python技术站