背景,我有一個使用特定實體的 MSSQL 服務器資料庫,因此到該資料庫的連接字串/引擎將如下所示:
引擎(mssql pyodbc://User:Password@servername\instance,5555/database?driver=ODBC Driver 17 for SQL Server)
請注意 servername 和 instance 之間的單個反斜杠。
我的測驗,同時作為字串和 json 型別:
環境檔案 1:
myvar = '[{"A":"123","B":"456", "C":"A\B"}]'
myvar2 = abc
myvar3 = [{"A":"123","B":"456", "C":"A\B"}]
main.py 檔案:
from dotenv import load_dotenv
import os
import json
if __name__ == '__main__':
load_dotenv('.env', override=True)
myv2 = os.getenv('myvar2')
myv = os.getenv('myvar')
myv3 = os.getenv('myvar3')
print(myv2)
print(myv)
print(myv3)
print('Json Outputs')
jmyv3 = json.loads(myv3)
print(f"{jmyv3=}")
jmyv = json.loads(myv)
print(f"{jmyv=}")
為 .env 中的字串變數和 .env 中的 json 變數生成錯誤 Invalid \escape
現在,讓我們將 .env 檔案修改為:
myvar = '[{"A":"123","B":"456", "C":"A\\B"}]'
myvar2 = abc
myvar3 = [{"A":"123","B":"456", "C":"A\\B"}]
json 變數回傳但回傳兩個反斜杠而不是一個。
jmyv3=[{'A': '123', 'B': '456', 'C': 'A\\B'}]
而且,字串版本仍然與 Invalid \escape 錯誤
現在,為了笑,我在 .env 中放了三個反斜杠
myvar = '[{"A":"123","B":"456", "C":"A\\\B"}]'
myvar2 = abc
myvar3 = [{"A":"123","B":"456", "C":"A\\\B"}]
這一次,字串回傳但帶有兩個反斜杠:
jmyv=[{'A': '123', 'B': '456', 'C': 'A\\B'}]
并且,json 生成錯誤 Invalid \escape
有沒有辦法讓json字串的'C'部分只列印一個反斜杠?像這樣:
[{'A': '123', 'B': '456', 'C': 'A\B'}]
而且,這些變數使用 base64 編碼存盤在 Airflow 中,這會導致另一層帶有反斜杠的不確定性。
uj5u.com熱心網友回復:
字串的 CONTENT 和該字串的 REPRESENTATION 之間的區別很容易混淆。請注意以下事項:
import json
myvar = '[{"A":"123","B":"456", "C":"A\\\\B"}]'
print(myvar)
jmyv3 = json.loads(myvar)
print(f"{jmyv3=}")
print(jmyv3[0]['C'])
輸出:
[{"A":"123","B":"456", "C":"A\\B"}]
jmyv3=[{'A': '123', 'B': '456', 'C': 'A\\B'}]
A\B
好的,讓我們分解發生了什么。第一的:
myvar = '[{"A":"123","B":"456", "C":"A\\\\B"}]'
該字串僅包含兩個反斜杠。我必須輸入 FOUR 才能讓 Python 做我想做的事,但是存盤在其中的字串myvar只有兩個反斜杠。您可以在輸出中看到這一點。
現在,我將該字串加載為 JSON:
jmyv3 = json.loads(myvar)
該字串實際上有兩個反斜杠,如果我們希望結果資料有一個反斜杠,這就是 JSON 所需要的。所以,當我列印那個值時jmyv3[0]['C'],你會看到那個字串只有一個反斜杠。
因此,您的問題的答案取決于該檔案是被解釋為 JSON 還是被解釋為 Python 代碼。如果是 Python 代碼,那么您需要 4 個反斜杠來生成 1 個反斜杠。
說了這么多,假設在 Windows 上,每個 Windows API 都會在它期望反斜杠的任何地方接受正斜杠,所以你可以跳過所有這些并使用正斜杠。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/460582.html
標籤:Python json base64 python-dotenv
下一篇:計算JSONB鍵陣列的加權平均值
