You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python的Flet库将JSON文件保存到指定文件夹

实现Flet GUI将JSON文件保存到指定文件夹

要实现通过Flet界面选择路径并保存JSON文件,只需在原示例代码的保存文件回调逻辑中添加JSON生成与写入操作,具体实现如下:

1. 补充依赖模块

新增json模块用于处理JSON数据序列化:

import json
import flet
from flet import (
    ElevatedButton,
    FilePicker,
    FilePickerResultEvent,
    Page,
    Row,
    Text,
    icons,
)

2. 定义JSON生成逻辑

替换为你实际的JSON数据生成代码:

def generate_json_data():
    # 示例:生成测试用JSON结构
    return {
        "user_id": "12345",
        "create_time": "2024-05-20",
        "content": ["示例数据1", "示例数据2"]
    }

3. 修改保存文件回调函数

在用户确认保存路径后,执行JSON写入操作:

def save_file_result(e: FilePickerResultEvent):
    if e.path:
        save_file_path.value = f"已保存至: {e.path}"
        # 生成JSON数据
        json_content = generate_json_data()
        # 将JSON写入选中的文件路径
        with open(e.path, "w", encoding="utf-8") as f:
            json.dump(json_content, f, ensure_ascii=False, indent=4)
    else:
        save_file_path.value = "保存已取消!"
    save_file_path.update()

完整可运行代码

import json
import flet
from flet import (
    ElevatedButton,
    FilePicker,
    FilePickerResultEvent,
    Page,
    Row,
    Text,
    icons,
)

def generate_json_data():
    # 替换为你的实际JSON生成逻辑
    return {
        "user_id": "12345",
        "create_time": "2024-05-20",
        "content": ["示例数据1", "示例数据2"]
    }

def main(page: Page):
    page.bgcolor = "white"

    # 选择文件对话框(原逻辑保留)
    def pick_files_result(e: FilePickerResultEvent):
        selected_files.value = (
            ", ".join(map(lambda f: f.name, e.files)) if e.files else "已取消选择!"
        )
        selected_files.update()

    pick_files_dialog = FilePicker(on_result=pick_files_result)
    selected_files = Text()

    # 保存文件对话框(修改后的逻辑)
    def save_file_result(e: FilePickerResultEvent):
        if e.path:
            save_file_path.value = f"已保存至: {e.path}"
            json_content = generate_json_data()
            with open(e.path, "w", encoding="utf-8") as f:
                json.dump(json_content, f, ensure_ascii=False, indent=4)
        else:
            save_file_path.value = "保存已取消!"
        save_file_path.update()

    save_file_dialog = FilePicker(on_result=save_file_result)
    save_file_path = Text()

    page.overlay.extend([pick_files_dialog, save_file_dialog])

    page.add(
        Row(
            [
                ElevatedButton(
                    "选择文件",
                    icon=icons.UPLOAD_FILE,
                    on_click=lambda _: pick_files_dialog.pick_files(allow_multiple=True),
                ),
                selected_files,
            ]
        ),
        Row(
            [
                ElevatedButton(
                    "保存JSON文件",
                    icon=icons.SAVE,
                    on_click=lambda _: save_file_dialog.save_file(
                        file_name="output.json"  # 设置默认保存文件名
                    ),
                    disabled=page.web,
                ),
                save_file_path,
            ]
        ),
    )

flet.app(target=main)

关键说明

  • save_file(file_name="output.json")可设置默认保存的文件名,简化用户操作
  • ensure_ascii=False保证中文等非ASCII字符正常显示,indent=4让JSON格式更易读
  • 若你的JSON生成逻辑涉及复杂计算或外部数据,直接替换generate_json_data函数即可
  • 注意:Flet的save_file功能仅支持桌面端,网页端会自动禁用对应按钮

内容的提问来源于stack exchange,提问作者Partik Chandra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 04:00:32