Python使用Fernet解密JSON转字典修改时TypeError问题问询
问题解决方法
错误原因
TypeError报错的核心原因是:Fernet.decrypt()返回的结果是JSON格式的字节数据,并非可以直接转换为字典的序列结构,直接调用dict()强制转换不符合语法规则。
正确实现步骤
你需要借助Python内置的json模块完成字节数据到字典的反序列化,完成字段修改后如果需要持久化存储,还要把修改后的内容重新加密写回文件,完整代码如下:
from cryptography.fernet import Fernet import json key = b'OKdXZnSshhlEZ6w44b0I366BZN5mb5sZQRHp5-UsCfo=' filename = 'sample.json' def decrypt_and_modify(key, filename): """ 解密文件,修改指定字段后重新加密写回原文件 """ keyval = Fernet(key) # 读取加密内容 with open(filename, "rb") as f: encrypted_data = f.read() # 解密得到JSON字节串,反序列化为字典 decrypted_bytes = keyval.decrypt(encrypted_data) decrypted_data = json.loads(decrypted_bytes) # 修改交易对字段 decrypted_data['RSI'][0]['TradingPair'] = 'ETHUSD' # (可选)如果需要把修改后的内容重新加密存回文件,添加以下代码 modified_json_bytes = json.dumps(decrypted_data, indent=4).encode() new_encrypted_data = keyval.encrypt(modified_json_bytes) with open(filename, "wb") as f: f.write(new_encrypted_data) return decrypted_data result = decrypt_and_modify(key, filename) print(result)
代码说明
- 新增导入
json模块,用json.loads()将解密后的JSON字节串转换为Python字典 - 修改完成后如果需要持久化,先把字典用
json.dumps()转为JSON字符串,编码为字节后重新加密,写入原文件即可 - 不需要存回文件的话删掉注释为可选的代码段即可
内容的提问来源于stack exchange,提问作者georgehere
相关产品推荐
相关产品推荐

