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

如何在Python函数回调中实现JSON序列化与反序列化?

实现Python回调场景下的JSON序列化与反序列化

我来帮你补全代码并实现需求,其实只需要用到Python标准库的json模块就能轻松搞定,结合你现有的代码,完整实现方案如下:

完整代码实现

首先要导入必要的json和os模块(你原代码里已经用到了os的文件检查功能),然后补全序列化逻辑,再新增反序列化的函数:

import json
import os

def function_callback(cb):
    cb()

def rand_name_giving_func(i):
    list_test = ['john', 'jim', 'anna', 'cynthia', 'dwight']
    return list_test[i] # not that random

def rand_value(i):
    dict_test = {'0': 'random_string_0', '1': 'random_string_1', '2': 'random_string_2'}
    return dict_test[str(i)]

def example():
    data = {}
    for i in range(3):
        data['name_' + str(i)] = rand_name_giving_func(i)
        data['value_' + str(i)] = rand_value(i)
    
    # 序列化:将Python字典写入JSON文件
    file_path = 'data.json'
    if os.path.isfile(file_path):
        print(f"提示:{file_path} 已存在,将覆盖原有内容")
    
    # 使用上下文管理器自动管理文件资源
    with open(file_path, 'w', encoding='utf-8') as f:
        # indent=4让JSON格式更易读,ensure_ascii=False支持非ASCII字符
        json.dump(data, f, indent=4, ensure_ascii=False)
    print(f"数据已成功序列化到 {file_path}")

def load_saved_data():
    # 反序列化:从JSON文件读取数据转为Python字典
    file_path = 'data.json'
    if not os.path.isfile(file_path):
        print(f"错误:{file_path} 文件不存在")
        return None
    
    with open(file_path, 'r', encoding='utf-8') as f:
        data = json.load(f)
    print("数据已成功反序列化")
    return data

# 测试回调场景下的调用
if __name__ == "__main__":
    # 将序列化操作作为回调传入
    function_callback(example)
    # 将反序列化操作作为回调传入(用lambda包装无参函数)
    loaded_data = function_callback(lambda: load_saved_data())
    print("读取到的反序列化数据:", loaded_data)

关键知识点解释

序列化(Python对象→JSON文件)

  • 使用json.dump()方法直接将Python字典写入JSON文件,参数说明:
    • data:要序列化的Python可序列化对象(这里是字典)
    • f:打开的文件对象
    • indent=4:生成带缩进的JSON格式,提升可读性
    • ensure_ascii=False:允许保存非ASCII字符(比如中文),避免转义
  • 用with open()上下文管理器,无需手动关闭文件,避免资源泄漏

反序列化(JSON文件→Python对象)

  • 使用json.load()方法从文件读取JSON内容,自动转换为Python字典
  • 先通过os.path.isfile()检查文件是否存在,避免抛出文件不存在的异常

回调场景适配

如果需要将序列化/反序列化逻辑作为回调传入function_callback,直接传入函数名即可;如果函数需要返回值(比如反序列化的结果),可以用lambda包装成无参函数传入,确保符合回调函数的参数要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:09:28