[英]Unable to remove additional double quotes in json string added by python
我有一個文件,其內容是
{'FileID': 'a3333.txt','Timestamp': '2014-12-05T02:01:28.271Z','SuccessList':'a,b,c,d,e'}
當我使用python讀取文件時,得到的字符串為
"{'FileID': 'a3333.txt','Timestamp': '2014-12-05T02:01:28.271Z','SuccessList':'a,b,c,d,e'}"
我想從字符串的開頭和結尾刪除雙引號。 從python文檔開始,我知道如果字符串中有單引號以避免轉義,則python會自己添加雙引號。
如果存儲的文件旨在為JSON,則它們無效。 JSON格式不允許使用單引號分隔字符串。 假設鍵/值字符串本身中沒有單引號 ,則可以將雙引號替換為雙引號,然后使用JSON模塊讀取:
import json
x = "{'FileID': 'a3333.txt','Timestamp': '2014-12-05T02:01:28.271Z','SuccessList':'a,b,c,d,e'}"
x = x.replace("'", '"')
j = json.loads(x)
print j
產量:
{'FileID': 'a3333.txt','Timestamp': '2014-12-05T02:01:28.271Z','SuccessList':'a,b,c,d,e'}
或者:
如果數據是Python dict
的字符串表示形式,則可以使用eval
讀取它。 使用eval
是危險的(請參閱Ned Batchelder的想法)。 也就是說,如果您自己編寫了文件,並且確信它不包含惡意代碼,則可以使用eval
將該字符串作為Python源代碼讀取:
x = "{'FileID': 'a3333.txt','Timestamp': '2014-12-05T02:01:28.271Z','SuccessList':'a,b,c,d,e'}"
eval(x, {'__builtins__': {}})
產量:
{'FileID': 'a3333.txt','Timestamp': '2014-12-05T02:01:28.271Z','SuccessList':'a,b,c,d,e'}
不過不要養成這種習慣! 正確的方法是將數據以適當的序列化格式保存到文件中,然后使用json
模塊之類的庫從磁盤讀取數據。
如果您的字符串實際上包含雙引號(它可能不包含雙引號,因為它們可能只是打印表示形式的一部分),則可以用切片將其刪除,例如,
>>> hello = '"hello more stuff things"'
>>> hello
'"hello more stuff things"'
>>> hello[1:-1]
'hello more stuff things'
請注意,在這種情況下,外部單引號不是字符串的一部分,它們只是打印表示形式的一部分。
您要引用的雙引號不是字符串的一部分,而是用來分隔字符串的。
如果將字符串“ thi's'”分配給變量:
>>> a = "thi's'"
該字符串中的第一個元素是t
:
>>> a[0]
t
在您的示例中,字符串中的第一個元素將是{
,我相信這是您所期望的。
您可以使用以下方式將string
轉換回dictionary
import re
x="{'FileID': 'a3333.txt','Timestamp': '2014-12-05T02:01:28.271Z','SuccessList':'a,b,c,d,e'}"
print dict(re.findall(r"""'([^']*)'\s*:\s*'([^']*)'""",x))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.