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

Python:加载dotenv中JSON变量时如何转义反斜杠?

解决.env中JSON变量的反斜杠解析错误

核心问题根源

.env文件里的"my\user"会被dotenv默认解析转义序列,\u会被当作Unicode转义尝试;同时JSON本身要求字符串内的反斜杠必须用\\表示,双重转义冲突导致解析失败。

方案一:修改.env文件并调整dotenv加载参数

方法1:关闭dotenv的转义解析

加载.env时添加escape=False参数,让dotenv原样保留所有字符:

import json
from os import environ as env
from dotenv import load_dotenv
# 关闭转义解析,保留.env中的原始字符
load_dotenv(escape=False)

class DatabaseUtils:
    @staticmethod
    def get_data_from_db(connection: DBConnection, script_path, query):
        selected_connection = json.loads(env[connection.value].replace('\n', ''))
        user = selected_connection["user"]  # 正确获取到"my\user"

对应的.env文件中,用户字段只需写单个反斜杠:

my_env_variable = '{"ip": "xx.xx.xxx.xxx",
    "user": "my\user",
    "password": "password"}'

方法2:在.env中转义反斜杠(不修改Python代码)

如果不想改动加载逻辑,就在.env里把反斜杠写成四个连续反斜杠,dotenv解析后会自动转为两个反斜杠,符合JSON的转义要求:

my_env_variable = '{"ip": "xx.xx.xxx.xxx",
    "user": "my\\\\user",
    "password": "password"}'

Python代码无需修改,直接解析就能得到正确的my\user。

方案二:Python读取后预处理字符串

如果无法修改.env文件,可在解析JSON前,把字符串里的单个反斜杠替换为两个(注意避开JSON本身的转义引号\"):

import json
from os import environ as env
from dotenv import load_dotenv
load_dotenv()

class DatabaseUtils:
    @staticmethod
    def get_data_from_db(connection: DBConnection, script_path, query):
        raw_str = env[connection.value].replace('\n', '')
        # 替换未转义的单个反斜杠,保留JSON转义引号的格式
        processed_str = raw_str.replace('\\', '\\\\').replace('\\"', '\\"')
        selected_connection = json.loads(processed_str)
        user = selected_connection["user"]

这种方法适合无法修改.env的场景,但要注意可能存在的边缘字符冲突。


内容的提问来源于stack exchange,提问作者M András

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 13:27:08