skip to Main Content

I have a dotenv variable saved into .env file (in json format).
Example:

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

Reading this variable form my .py script (connection is a enum type DBConnection)

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):
      selected_connection = json.loads(env[connection.value].replace('n', ''))

      user = selected_connection["user"]

Unfortunately, I got an error message, due to backslash in user (coming from json) and gives error:

self = <json.decoder.JSONDecoder object at 0x000001295223F0D0>
s = '{"instance_ip": "xx.xx.xxx.xxx",        "user": "myuser",        "password": "password"'
idx = 0

json.decoder.JSONDecodeError: Invalid escape: line 1 column 70 (char 69)

What is the best solution to escape the backslash? Unfortunately, I cannot omit like r’value’ because the parameter is in the .env file and cannot add "r" before the json

Edit: I also try with json.dumps before json.loads, but in this case I cannot

selected_connection["user"]

anymore, because selection_connection became a str

2

Answers


  1. Backslashes needs to be escaped once for env file and once for JSON string, so two times:

    my_env_variable = '{"ip": "xx.xx.xxx.xxx",
        "user": "my\\user",
        "password": "password"}'
    
    Login or Signup to reply.
  2. try using this

    selected_connection = json.loads(connection_data.replace(‘n’, ”).replace(”, ‘\’))

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search