Python处理JSON文件解决Firebase上传时键名含非法字符的报错问题
Firebase 非法键名批量处理方案
Firebase 的键名规则禁止包含 .、$、#、[、]、/ 这类特殊字符,你遇到的报错就是键名中的英文句号触发的规则限制。以下是可直接运行的 Python 处理脚本,可批量替换所有键名中前缀的数字及紧随其后的英文句号和空格,支持任意嵌套结构的 JSON 文件。
完整处理代码
import json import re def process_json_keys(obj): # 递归处理JSON中所有键名 if isinstance(obj, dict): new_dict = {} for old_key, value in obj.items(): # 匹配键开头的「数字+英文句号+可选空格」,替换为空 new_key = re.sub(r'^\d+\.\s*', '', old_key) new_dict[new_key] = process_json_keys(value) return new_dict elif isinstance(obj, list): # 处理列表中的每个元素 return [process_json_keys(item) for item in obj] else: # 基础数据类型直接返回 return obj # --------------- 替换为你自己的文件路径 --------------- INPUT_JSON_PATH = "原始文件.json" OUTPUT_JSON_PATH = "处理后可上传至Firebase的文件.json" # ------------------------------------------------------ if __name__ == "__main__": # 读取原始JSON with open(INPUT_JSON_PATH, "r", encoding="utf-8") as f: raw_data = json.load(f) # 处理所有键名 processed_data = process_json_keys(raw_data) # 导出处理后的JSON with open(OUTPUT_JSON_PATH, "w", encoding="utf-8") as f: json.dump(processed_data, f, indent=4, ensure_ascii=False) print("键名处理完成,新文件已生成")
处理效果
你提供的JSON片段处理后结果如下,完全符合Firebase的键名规则:
"2021-09-24 20:00:00": { "open": "146.9300", "high": "147.0100", "low": "146.9300", "close": "146.9700", "volume": "28859" }
注意事项
- 脚本支持任意嵌套层级的字典、列表结构JSON,无需修改逻辑即可适配你的文件结构
- 执行前请将代码中的输入输出路径替换为你本地的实际文件路径
- 处理完成后可先打开新生成的JSON文件核验键名是否符合预期,再上传到Firebase
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

