简介
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它已经成为了现代Web应用程序中最常用的数据格式之一。
在Python中,我们可以使用内置的json模块来处理JSON格式的文件,`json`是Python3标准库中用于处理JSON数据格式的模块。其中,`json.dumps()`和`json.loads()`函数是处理JSON数据的主要方法。在本文中,将讨论`json`的特性和作用、常用的方法以及代码示例,以及相关的应用场景。还了介绍如何使用Python处理JSON格式的文件。
应用场景
`json`模块的应用场景涉及到Python应用程序中与Web API交互时的数据传输和处理方面,具体应用场景包括:
- 在网页程序中进行AJAX的数据传输。
- 在Web API中传输数据。
- 在Python应用程序中读取和处理由其他应用程序输出的JSON数据。
特性和作用
`json`模块主要有以下几个特点:
- 支持序列化和反序列化JSON数据。
- 支持Python内置数据类型和自定义数据类型的JSON编码和解码。
- 支持可选的缩进功能。
- 支持ASCII编码和UTF-8编码。
总之,主要的作用是在Python应用中处理JSON格式的数据,例如处理来自Web API的JSON格式数据。json模块提供了JSON格式的支持,可以将Python对象转换为JSON格式的数据,或者将JSON格式的数据转换为Python对象。json模块中的函数可以让Python程序进行高效的数据存储和传输,实现各种数据操作。也可以用来对json文件的处理。
1. 读取JSON文件-从文件中反序列化Python对象
在Python中,我们可以使用json模块的load()函数来读取JSON格式的文件。load()函数将JSON格式的字符串转换为Python对象。下面是一个读取JSON文件的示例代码:
import json
# 读取JSON文件
with open('data.json', 'r') as f:
# 从文件中加载JSON格式的数据并反序列化为Python对象
data = json.load(f)
# 打印读取的数据 输出Python对象
print(data)
上面的代码中,我们使用了Python的with语句来打开文件并自动关闭文件,从文件`data.json`中加载JSON格式的数据。json.load()函数将JSON格式的文件读取并反序列化为Python对象到data中。最后,我们打印读取的数据。
2. 写入JSON文件-将Python对象序列化到文件中
在Python中,我们可以使用json模块的dump()函数将Python对象转换为JSON格式的字符串,并将其写入到文件中。下面是一个写入JSON文件的示例代码:
示例1:基本序列化
import json
# 定义一个Python字典
data = {
"name": "John",
"age": 30,
"city": "New York"
}
# 将Python字典写入JSON文件
with open('data.json', 'w') as f:
json.dump(data, f)
print("写入完成")
上面的代码中,我们定义了一个Python字典data,然后使用json.dump()函数将Python对象序列化为JSON字符串其写入到JSON文件中。最后,我们打印出“写入完成”。
示例2:其他的Python类型序列化
data = {
'name': 'Mike',
'age': 18,
'is_student': True,
'grades_list': [80, 85, 90],
'scores_dict': {
'math': 85,
'physics': 90,
'biology': 93
}
}
# 序列化Python对象并写入文件
with open('data.json', 'w') as f:
json.dump(data, f, indent=4)
上述代码将Python对象`data`序列化为JSON格式的字符串,并写入到文件`data.json`中。其中`json.dump()`函数将Python对象序列化为JSON字符串,`indent`参数是缩进的数量。
3. 处理JSON数据-从JSON格式的字符串反序列化为Python对象
在Python中,我们可以使用json模块将JSON格式的字符串转换为Python对象。下面是一个处理JSON数据的示例代码:
示例1:格式化基本字典
import json
# 定义一个JSON字符串
json_str = '{"name": "steverocket", "age": 25, "city": "New York"}'
# 将JSON字符串转换为Python对象
data = json.loads(json_str)
# 打印Python对象
print(data) # {'name': 'steverocket', 'age': 25, 'city': 'New York'}
# 访问Python对象的属性
print(data['name']) # steverocket
print(data['age']) # 25
print(data['city']) # New York
上面的代码中,我们定义了一个JSON字符串json_str,然后使用json.loads()函数将其转换为Python对象data。最后,我们可以访问Python对象的属性,例如data['name']、data['age']和data['city']。
示例2:格式化docstring嵌套类型文档
json_data = '''
{
"name": "Mike",
"age": 18,
"is_student": true,
"grades_list": [80, 85, 90],
"scores_dict": {
"math": 85,
"physics": 90,
"biology": 93
}
}
'''
# 将JSON格式的字符串转化为Python对象
data = json.loads(json_data)
# 输出Python对象
print(type(data), data) #
上述代码将一个JSON字符串`json_data`反序列化为Python对象。其中`json.loads()`函数将JSON字符串转化为Python对象。
4. 格式化JSON数据-将Python对象序列化为JSON格式
在Python中,我们可以使用json模块的dumps()函数将Python对象转换为JSON格式的字符串,并格式化输出。下面是一个格式化JSON数据的示例代码:
示例1:基本格式化输出
import json
# 定义一个Python字典
data = {
"name": "steverocket02",
"age": 26,
"city": "New York"
}
# 将Python字典转换为JSON格式的字符串,并格式化输出
json_str = json.dumps(data, indent=4)
# 打印JSON格式的字符串
print(json_str)
# 输出
# {
# "name": "steverocket02",
# "age": 26,
# "city": "New York"
# }
上面的代码中,我们使用json.dumps()函数将Python字典data转换为JSON格式的字符串,并使用indent参数指定缩进量。最后,我们打印格式化后的JSON字符串。
示例2:sort_keys参数的使用
data = {
'name': 'Mike',
'age': 18,
'is_student': True,
'grades_list': [80, 85, 90],
'scores_dict': {
'math': 85,
'physics': 90,
'biology': 93
}
}
# 将Python对象转化为JSON格式的字符串
json_data = json.dumps(data, indent=4, sort_keys=True)
# 输出JSON格式的字符串
print(json_data)
上述代码将一个Python字典对象`data`序列化为JSON字符串。其中`indent`参数是缩进的数量,`sort_keys`参数用于控制输出键值对的顺序。
输出结果为:
json
{
"age": 18,
"grades_list": [
80,
85,
90
],
"is_student": true,
"name": "Mike",
"scores_dict": {
"biology": 93,
"math": 85,
"physics": 90
}
}
5. 文件读取写入带中文案例
import json, time
infos = {"_id": "description", "name": "python", "filename": "中文", "os": ["abcd", "hello", "www"], "blog": WEIXIN_URL}
infos["time"] = time.time() # 动态修改json文件内容
# 生成json文件
def write_json_file(file_name, infos):
with open(file_name, "w") as jsonf:
jsonf.write(json.dumps(infos))
def read_json_file(file_name):
# 读取json文件的内容
with open(file_name, 'r') as jsonf:
file_info = json.load(jsonf)
print(file_info, type(file_info))
filename = file_info["filename"]
print(filename)
infos = json.dumps(file_info, sort_keys=True, indent=4)
print(infos, type(infos))
if __name__ == '__main__':
file_name = "desc.json"
write_json_file(file_name, infos)
read_json_file(file_name)
生成的文件
输出内容:
{'_id': 'description', 'name': 'python', 'filename': '中文', 'os': ['abcd', 'hello', 'www'], 'blog': 'https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q', 'time': 1684482364.7974849}
中文
{
"_id": "description",
"blog": "https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q",
"filename": "\u4e2d\u6587",
"name": "python",
"os": [
"abcd",
"hello",
"www"
],
"time": 1684482364.7974849
}
总结
在Python中,我们可以使用json模块来处理JSON格式的文件。我们可以使用json.load()函数读取JSON文件,使用json.dump()函数将Python对象写入JSON文件。我们还可以使用json.loads()函数将JSON格式的字符串转换为Python对象,使用json.dumps()函数将Python对象转换为JSON格式的字符串,并格式化输出。掌握这些技巧可以使我们更好地处理JSON格式的数据。
总之,`json`模块是处理Python里的JSON格式数据的重要模块,它的作用是将程序中的数据格式转换为其他应用程序可以使用的格式,并在数据传输过程中对数据进行编码、解码等处理,大大方便了数据的传输和处理,提高了应用程序的效率。