当前位置:首页 > Python > 正文

Python3内置模块json详解:JSON编码与解码方法教程 | Python数据处理

{ }

Python3 JSON模块详解

全面解析json模块的编码与解码方法,掌握Python数据序列化核心技能

JSON与Python数据结构

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。Python的json模块提供了在Python对象和JSON格式之间转换的功能。

Python与JSON数据类型对应关系:
  • Python字典(dict) ↔ JSON对象({ })
  • Python列表(list) ↔ JSON数组([ ])
  • Python字符串(str) ↔ JSON字符串(" ")
  • Python整数(int)、浮点数(float) ↔ JSON数字
  • Python True/False ↔ JSON true/false
  • Python None ↔ JSON null

JSON编码方法

JSON编码是将Python对象转换为JSON格式字符串的过程,主要使用json.dumps()json.dump()两个方法。

json.dumps()方法

json.dumps()方法将Python对象转换为JSON格式的字符串。

Python示例代码
import json

# Python字典
data = {
    "name": "张三",
    "age": 30,
    "is_student": False,
    "courses": ["Python", "JavaScript", "数据库"],
    "address": None
}

# 将Python对象转换为JSON字符串
json_string = json.dumps(data, ensure_ascii=False, indent=4)

print("JSON字符串:")
print(json_string)

json.dump()方法

json.dump()方法将Python对象转换为JSON格式并写入文件。

Python示例代码
import json

data = {
    "company": "TechCorp",
    "employees": [
        {"name": "Alice", "position": "Developer"},
        {"name": "Bob", "position": "Designer"}
    ],
    "founded": 2010
}

# 将Python对象写入JSON文件
with open("company_data.json", "w", encoding="utf-8") as f:
    json.dump(data, f, indent=4, ensure_ascii=False)
    
print("数据已成功写入company_data.json文件")

dumps/dump常用参数

参数 说明 默认值
ensure_ascii 是否确保ASCII字符,设为False可输出中文 True
indent 缩进空格数,使JSON格式化输出 None
separators 指定分隔符,如(item_separator, key_separator) (', ', ': ')
sort_keys 是否按键排序 False

JSON解码方法

JSON解码是将JSON格式字符串或文件转换为Python对象的过程,主要使用json.loads()json.load()两个方法。

json.loads()方法

json.loads()方法将JSON格式的字符串转换为Python对象。

Python示例代码
import json

# JSON格式字符串
json_str = '''
{
    "book": {
        "title": "Python编程:从入门到实践",
        "author": "Eric Matthes",
        "year": 2016,
        "tags": ["编程", "Python", "入门"]
    }
}
'''

# 将JSON字符串转换为Python对象
data = json.loads(json_str)

# 访问数据
print("书名:", data["book"]["title"])
print("作者:", data["book"]["author"])
print("标签:", ", ".join(data["book"]["tags"]))

json.load()方法

json.load()方法从JSON文件中读取数据并转换为Python对象。

Python示例代码
import json

# 从JSON文件读取数据
with open("config.json", "r", encoding="utf-8") as f:
    config = json.load(f)

# 使用配置数据
print("应用名称:", config["app_name"])
print("版本:", config["version"])
print("设置项:", config["settings"])

高级应用技巧

自定义对象序列化

通过继承JSONEncoder处理自定义对象的序列化:

class User:
    def __init__(self, name, age):
        self.name = name
        self.age = age

class CustomEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, User):
            return {"name": obj.name, "age": obj.age}
        return super().default(obj)

user = User("李四", 28)
json_str = json.dumps(user, cls=CustomEncoder)
print(json_str)  # 输出: {"name": "李四", "age": 28}

处理日期时间

序列化datetime对象为ISO格式字符串:

from datetime import datetime

def datetime_handler(obj):
    if isinstance(obj, datetime):
        return obj.isoformat()
    raise TypeError("类型不支持")

data = {
    "event": "会议",
    "time": datetime.now()
}

json_str = json.dumps(data, default=datetime_handler)
print(json_str)  # 输出: {"event": "会议", "time": "2023-08-17T14:30:00.123456"}

JSON处理最佳实践

  • 始终指定编码(如UTF-8)以避免字符问题
  • 处理文件时使用with语句确保正确关闭
  • 对用户输入进行验证,防止JSON注入攻击
  • 处理大文件时考虑流式处理
  • 使用json.tool模块验证和格式化JSON

总结

Python的json模块提供了强大而灵活的JSON处理能力,是数据交换和存储的重要工具。通过掌握json.dumps、json.loads、json.dump和json.load这四个核心方法,你可以轻松实现Python对象与JSON格式之间的转换。

在实际应用中,根据需求选择合适的参数配置,如ensure_ascii、indent等,可以优化输出结果。对于复杂对象的序列化,可通过自定义编码器或default参数处理。

JSON作为现代Web开发和数据交换的标准格式,熟练掌握Python中的JSON处理技巧,将大大提高你的开发效率和数据处理能力。

函数 功能 使用场景
json.dumps() Python对象 → JSON字符串 需要JSON字符串的场景(API响应、数据传输)
json.dump() Python对象 → JSON文件 数据持久化存储到文件
json.loads() JSON字符串 → Python对象 解析来自API、客户端的JSON数据
json.load() JSON文件 → Python对象 读取存储在文件中的JSON数据

© 2023 Python JSON教程 | 掌握数据交换的核心技术

发表评论