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数据,实现与其他语言的数据交换和存储。
 极客教程
极客教程