Python JSON格式化
1. 简介
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于前后端数据传输和存储。Python提供了json
模块来处理JSON数据,包括解析JSON字符串和格式化输出。本文将详细介绍Python中JSON的相关操作。
2. JSON基础
在开始介绍Python中JSON的使用前,我们先来了解一下JSON的基础知识。
2.1 JSON语法
JSON由键值对组成,键必须是字符串,值可以是字符串、数字、布尔值、数组、对象或者null
。JSON使用花括号{}
表示对象,使用方括号[]
表示数组。
以下是一个包含各种类型的JSON示例:
{
"name": "John",
"age": 30,
"isStudent": false,
"marks": [85, 90, 95],
"address": {
"city": "New York",
"country": "USA"
},
"languages": ["Python", "Java", "JavaScript"],
"isNull": null
}
2.2 JSON和Python对象的对应关系
将JSON数据解析后,我们可以将其转换为Python对象。具体的转换规则如下:
JSON | Python |
---|---|
Object | dict |
Array | list |
Number | int/float |
String | str |
Boolean | bool |
null | None |
3. JSON解析
在Python中,我们可以使用json
模块来解析JSON字符串。json
模块提供了两个主要的方法:json.loads()
和json.load()
。
3.1 json.loads()
json.loads()
方法将JSON字符串解析为Python对象。
以下是一个示例代码:
import json
# JSON字符串
json_str = '{"name": "John", "age": 30, "city": "New York"}'
# 解析JSON
data = json.loads(json_str)
# 输出解析结果
print(data)
输出:
{'name': 'John', 'age': 30, 'city': 'New York'}
3.2 json.load()
json.load()
方法从文件中读取JSON字符串并解析为Python对象。
假设我们有一个名为data.json
的文件,并包含以下内容:
{
"name": "John",
"age": 30,
"city": "New York"
}
以下是一个示例代码:
import json
# 从文件中读取JSON
with open('data.json') as f:
data = json.load(f)
# 输出解析结果
print(data)
输出:
{'name': 'John', 'age': 30, 'city': 'New York'}
4. JSON格式化输出
在Python中,我们可以使用json
模块将Python对象转换为JSON字符串,并格式化输出。
4.1 json.dumps()
json.dumps()
方法用于将Python对象转换为JSON字符串。
以下是一个示例代码:
import json
# Python对象
data = {
"name": "John",
"age": 30,
"city": "New York"
}
# 转换为JSON字符串
json_str = json.dumps(data)
# 输出JSON字符串
print(json_str)
输出:
{"name": "John", "age": 30, "city": "New York"}
4.2 json.dump()
json.dump()
方法用于将Python对象转换为JSON字符串,并将其写入文件。
以下是一个示例代码:
import json
# Python对象
data = {
"name": "John",
"age": 30,
"city": "New York"
}
# 将JSON字符串写入文件
with open('data.json', 'w') as f:
json.dump(data, f)
执行后将在当前目录下生成名为data.json
的文件,并包含以下内容:
{
"name": "John",
"age": 30,
"city": "New York"
}
5. JSON数据访问
5.1 访问对象中的值
以下是一个示例代码,演示如何访问JSON对象中的值:
import json
# JSON字符串
json_str = '{"name": "John", "age": 30, "city": "New York"}'
# 解析JSON
data = json.loads(json_str)
# 访问值
name = data['name']
age = data['age']
city = data['city']
# 输出结果
print(f"Name: {name}")
print(f"Age: {age}")
print(f"City: {city}")
输出:
Name: John
Age: 30
City: New York
5.2 访问数组中的值
以下是一个示例代码,演示如何访问JSON数组中的值:
import json
# JSON字符串
json_str = '{"marks": [85, 90, 95]}'
# 解析JSON
data = json.loads(json_str)
# 访问数组中的值
marks = data['marks']
first_mark = marks[0]
second_mark = marks[1]
third_mark = marks[2]
# 输出结果
print(f"Marks: {marks}")
print(f"First Mark: {first_mark}")
print(f"Second Mark: {second_mark}")
print(f"Third Mark: {third_mark}")
输出:
Marks: [85, 90, 95]
First Mark: 85
Second Mark: 90
Third Mark: 95
6. JSON格式化输出选项
json.dumps()
方法提供了一些选项来控制JSON格式化输出的形式,如缩进、排序等。
以下是一些常用的选项:
indent
:指定缩进的空格数,可以是整数或字符串,默认为None
。separators
:指定分隔符,默认为(', ', ': ')
。sort_keys
:指定是否按键进行排序,默认为False
。
以下是一个示例代码:
import json
# Python对象
data = {
"name": "John",
"age": 30,
"city": "New York"
}
# 转换为JSON字符串,使用4个空格进行缩进,按键排序
json_str = json.dumps(data, indent=4, sort_keys=True)
# 输出JSON字符串
print(json_str)
输出:
{
"age": 30,
"city": "New York",
"name": "John"
}
7. 总结
本文介绍了Python中处理JSON的基本操作,包括解析JSON字符串、格式化输出和访问JSON数据。通过json
模块的相关方法,我们可以在Python中轻松地处理JSON数据,实现与其他语言的数据交换和存储。