Python JSON常用编解码方法代码实例
1. JSON简介
JSON(JavaScript Object Notation)是一种轻量级数据交换格式,它以易于阅读和编写的文本格式为基础,被设计为便于人们阅读和编写,同时也便于机器解析和生成。JSON格式是一种适合于AJAX应用程序的数据格式,也是现在大多数Web服务的标准输出格式。
2. 常用模块
Python内置了json
模块,实现JSON的编解码,同时也有比json
更加快速的第三方模块,例如ujson
和simplejson
。
3. JSON编码
JSON编码是将Python对象转换为JSON格式的过程。Python内置的json
模块提供了两个方法:dumps()
和dump()
,前者将Python对象编码成为json格式的字符串,后者将Python对象写入文件。
下面是一个将Python字典转换为JSON字符串的例子:
import json
dict_data = {"name": "Alice", "age": 20, "sex": "female"}
json_str = json.dumps(dict_data)
print(json_str) # 输出:{"name": "Alice", "age": 20, "sex": "female"}
常用的参数:
sort_keys
:为True则按照键排序,为False则不进行排序。
indent
:格式化输出,即在每个层级增加几个空格或缩进。
ensure_ascii
:默认为True,表示将所有非ASCII字符编码,为False则不编码。
下面是一个例子:
import json
dict_data = {"name": "Alice", "age": 20, "sex": "female"}
json_str = json.dumps(dict_data, sort_keys=True, indent=4, ensure_ascii=False)
print(json_str)
输出:
{
"age": 20,
"name": "Alice",
"sex": "female"
}
4. JSON解码
JSON解码是将JSON对象转换为Python对象的过程,同样也有两个方法:loads()
和load()
,前者将JSON格式的字符串解码为Python对象,后者将文件中JSON格式的字符串读取并解码为Python对象。
下面是一个将JSON字符串解码为Python字典的例子:
import json
json_str = '{"name": "Alice", "age": 20, "sex": "female"}'
dict_data = json.loads(json_str)
print(dict_data) # 输出:{'name': 'Alice', 'age': 20, 'sex': 'female'}
5. JSON与Python对象互相转换
JSON和Python对象之间可以相互转换,转换方法就是通过dumps()
和loads()
实现。
下面是一个将Python对象转换为JSON字符串再解码为Python对象的例子:
import json
dict_data = {"name": "Alice", "age": 20, "sex": "female"}
json_str = json.dumps(dict_data)
dict_data2 = json.loads(json_str)
print(dict_data2) # 输出:{'name': 'Alice', 'age': 20, 'sex': 'female'}
6. 注意事项
在将Python对象编码为JSON格式的字符串时,需要考虑Python对象中包含的数据类型是否能够转换为JSON格式,例如Python的datetime
类型无法直接转换为JSON格式,需要先将其转换为字符串或数字类型。
下面是一个例子:
import json
from datetime import datetime
data = {"date": datetime.now()}
# 直接转换会抛出异常
json.dumps(data)
# 先将datetime类型转换为字符串
data["date"] = str(data["date"])
json.dumps(data)
在将JSON格式的字符串解码为Python对象时,也需要保证JSON格式的正确性,否则解码会抛出异常。
7. 总结
JSON是一种轻量级的数据交换格式,易于阅读和编写,也越来越成为Web服务的标准输出格式。Python内置的json
模块提供了方便的JSON编解码方法,同时也有第三方扩展模块可以提供更好的性能。
在使用JSON编解码时,需要注意Python对象和JSON格式之间的数据类型转换、格式的正确性等问题。