如何使用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
相关产品推荐
相关产品推荐

