1. 什么是JSON
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写。它基于JavaScript语言的一个子集,采用完全独立于编程语言的文本格式,用于表示结构化数据。JSON是一种文本格式,可以通过程序解析和操作。
在Python中,可以使用内置的json模块来进行JSON数据的编解码操作。
2. JSON编码
2.1 json.dumps()
Python对象可以通过json.dumps()方法转换为JSON字符串:
import json
# 定义一个Python对象
data = {'name': 'John', 'age': 30, 'city': 'New York'}
# 将Python对象编码为JSON字符串
json_str = json.dumps(data)
# 打印JSON字符串
print(json_str)
执行结果:
{"name": "John", "age": 30, "city": "New York"}
可以看到,Python对象转换成了JSON字符串,其中的key必须是字符串类型。
2.2 json.dump()
如果需要将JSON数据写入文件中,则可以使用json.dump()方法:
import json
# 定义一个Python对象
data = {'name': 'John', 'age': 30, 'city': 'New York'}
# 将Python对象转换为JSON数据并写入文件中
with open('data.json', 'w') as f:
json.dump(data, f)
执行以上代码后,会在当前目录下生成一个名为data.json的JSON文件。
3. JSON解码
3.1 json.loads()
可以使用json.loads()方法将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'}
可以看到,JSON字符串成功解码为Python对象。
3.2 json.load()
如果需要将JSON文件读取为Python对象,则可以使用json.load()方法:
import json
# 从JSON文件中读取数据并解码为Python对象
with open('data.json', 'r') as f:
data = json.load(f)
# 打印Python对象
print(data)
执行以上代码后,会将data.json文件中的JSON数据读取为Python对象。
4. 更多JSON选项
4.1 美化输出
通过添加indent参数可以美化输出结果:
import json
# 定义一个Python对象
data = {'name': 'John', 'age': 30, 'city': 'New York'}
# 将Python对象转换为带有缩进的JSON数据, indent=4表示缩进4个空格
json_str = json.dumps(data, indent=4)
# 打印带有缩进的JSON数据
print(json_str)
执行结果:
{
"name": "John",
"age": 30,
"city": "New York"
}
4.2 去除空格
通过添加separators参数可以去除空格:
import json
# 定义一个Python对象
data = {'name': 'John', 'age': 30, 'city': 'New York'}
# 将Python对象转换为不带空格的JSON数据
json_str = json.dumps(data, separators=(',', ':'))
# 打印不带空格的JSON数据
print(json_str)
执行结果:
{"name":"John","age":30,"city":"New York"}
4.3 JSON编码高级参数
以下是JSON编码的高级参数:
skipkeys:如果Python对象中的key不是字符串类型,会引发TypeError异常,但设置skipkeys=True可以忽略这样的错误,而跳过这些项。
ensure_ascii:默认情况下,json.dumps()方法使用ASCII编码。将ensure_ascii=False可以输出一个带有UTF-8编码的JSON字符串。
sort_keys:默认情况下,json.dumps()方法按键的字母顺序进行编码。可以通过设置sort_keys=True按键名称排序输出。
5. 总结
在Python中,内置的json模块可以方便地进行JSON数据的编解码操作。使用json.dumps()方法可以将Python对象编码为JSON字符串,使用json.loads()方法可以将JSON字符串解码为Python对象。
通过添加json选项可以美化或者压缩输出结果,同时也可以跳过非字符串key, 或者在输出时按键名称排序。