簡體   English   中英

無法刪除由python添加的json字符串中的其他雙引號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM