我試圖理解為什么下面的代碼在 Python 中不起作用:
import json
s = json.loads(' {"Testing" : "This quo\\\\"te String"} ')
print(s)
理論上,我應該得到的是{'Testing' : 'This quo\"te String'}.
這些作業正常:
print(json.loads(' {"Testing" : "This quo\\"te String"} ')) ----> {'Testing' : 'This quo"te String'}
print(json.loads(' {"Testing" :"This quo\\\\\\"te String"}')) ----> {'Testing' : 'This quo\\"te String'}
我猜這與\"字典中有 a 的特質有關,但無法弄清楚到底發生了什么。
uj5u.com熱心網友回復:
該字串This quo\"te String在普通 Python 中需要兩次轉義:一種用于 the \,另一種用于 . ",總共產生三個反斜杠:
>>> print("This quo\\\"te String")
This quo\"te String
對于 json,所有這些反斜杠必須自己轉義,因為字串嵌入在另一個字串中。因此,總共需要六個反斜杠:
>>> print(json.loads('"This quo\\\\\\"te String"'))
This quo\"te String
但是,如果使用原始字串,則不需要額外的轉義:
>>> print(json.loads(r'"This quo\\\"te String"'))
This quo\"te String
在您的第一個示例中,四個反斜杠將被決議為單個文字\(即作為轉義的反斜杠),"而未轉義。
請注意,如果字串在 a 內,則沒有區別dict- 結果將完全相同:
>>> dct = json.loads('{"Testing": "This quo\\\\\\"te String"}')
>>> print(dct['Testing'])
This quo\"te String
uj5u.com熱心網友回復:
您的 python 字串中需要奇數對反斜杠以在 json 中以奇數反斜杠結束。然后,每對反斜杠變成一個反斜杠,您還需要一個反斜杠——奇數的一個——來轉義引號。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/442599.html
