现在位置: 首页 > Flask 教程 > 正文

Flask JSON

Flask 的 JSON 模块提供了序列化/反序列化功能,底层默认使用 Python 标准库 json,可通过 JSONProvider 替换。

导入方式:

from flask import jsonify

from flask.json import dumps, loads

jsonify 函数

最常用的 JSON 响应构建函数。将 Python 对象序列化为 JSON Response。

用法 说明
jsonify(*args, **kwargs) 将参数序列化为 JSON,返回 Response(Content-Type: application/json)
jsonify(dict) 序列化字典为 JSON 响应
jsonify(key=value, ...) 序列化关键字参数为 JSON 响应

dumps / loads / dump / load

函数 签名 说明
dumps (obj, *, skipkeys=False, ensure_ascii=True, ...) 将 Python 对象序列化为 JSON 字符串
loads (s, *, ...) 将 JSON 字符串反序列化为 Python 对象
dump (obj, fp, *, ...) 将 Python 对象序列化并写入文件
load (fp, *, ...) 从文件读取并反序列化 JSON

JSONProvider 类

可自定义的 JSON 处理器基类。要替换默认 JSON 实现,继承此类并覆盖相关方法。

方法 说明
dumps(obj, **kwargs) 序列化对象为 JSON 字符串
loads(s, **kwargs) 从 JSON 字符串反序列化为 Python 对象
response(obj) 将对象转换为 JSON Response。用于 jsonify 和返回 dict/list 时

DefaultJSONProvider

默认的 JSONProvider 实现,基于 Python 标准库 json。

属性/方法 说明
ensure_ascii 是否转义非 ASCII 字符。可设为 False 支持中文输出
sort_keys 是否按 key 排序输出。默认为 True
compact 是否紧凑输出(无空格)。默认为 False

JSON Tag 序列化

flask.json.tag 模块支持序列化更多 Python 类型,如 datetime、tuple、set 等。

标签 对应的 Python 类型
JSONTaggedJSONSerializer 增强版序列化器,Session 默认使用。支持带标签的 JSON 格式

代码示例

实例

from flask import Flask, jsonify

app = Flask(__name__)

@app.get("/api/me")
def me():
    # 返回 dict,Flask 自动调用 jsonify
    return {
        "username": "runoob",
        "email": "test@runoob.com",
        "roles": ["admin", "editor"]
    }

@app.get("/api/users")
def users():
    # 返回 list,Flask 自动调用 jsonify
    return [
        {"id": 1, "name": "runoob"},
        {"id": 2, "name": "admin"}
    ]

@app.get("/api/status")
def status():
    # 显式使用 jsonify
    return jsonify(status="ok", version="1.0")

# 配置中文 JSON 输出
app.json.ensure_ascii = False
# {"username": "runoob", "description": "中文描述内容"}