2011-05-13 30 views
23

Python'da çift tırnaklı bir ters eğik çizgi ve çift tırnak işareti ile nasıl değiştirebilirim?Python'da JSON için çift tırnak işareti çiftinden kaçış

>>> s = 'my string with "double quotes" blablabla' 
>>> s.replace('"', '\\"') 
'my string with \\"double quotes\\" blablabla' 
>>> s.replace('"', '\\\"') 
'my string with \\"double quotes\\" blablabla' 

aşağıdaki almak istiyorum:

'my string with \"double quotes\" blablabla' 

cevap

11
>>> s = 'my string with \\"double quotes\\" blablabla' 
>>> s 
'my string with \\"double quotes\\" blablabla' 
>>> print s 
my string with \"double quotes\" blablabla 
>>> 

yazdırdığınız zaman, sizden kaçarsınız, dizeyi daha 'ham' bir durum görürsünüz. Yani şimdi ...

>>> s = """my string with "double quotes" blablabla""" 
'my string with "double quotes" blablabla' 
>>> print s.replace('"', '\\"') 
my string with \"double quotes\" blablabla 
>>> 
+3

'repr()' ve 'str()' arasındaki fark bu. 'print s' diziyi basarken komut satırında' '' print repr (s) 'ile aynı şeyi yapar. –

+1

-1, çünkü @zeekay, daha ideomatik bir cevap sunuyor çünkü: json.dumps (s) '. İstenen etkiyi elde etmek için standart JSON kütüphanesini kullanır. Bu kodla karşılaştığınızda, hemen JSON serileştirme ile uğraştığımızı görüyorsunuz. OTOH, s.replace ('' ',' \\ '') 'yi gördüğünüzde, neler olduğunu tahmin etmelisiniz. –

+1

Bazen gömülü bir piton ile tüm ithalatlara erişiminiz olmayabilir. – AnthonyVO

-2

Neden üçlü tırnak dize bastırma yapamaz:

>>> s = """my string with "some" double quotes""" 
>>> print s 
my string with "some" double quotes 
sadece 's' bunu sormak
+0

. Oraya ihtiyacım var. – aschmid00

+0

Sanırım j'yi korumak için teklifleri kaçırmak istiyor. – Andrew

65

json modülünü kullanıyor olmalısınız. json.dumps(string). Diğer python veri tiplerini de serileştirebilir. iki kez, iki kez ve json.loads json.dumps yaparak bir json dizi/sözlüğünü kaçabilir

import json 

>>> s = 'my string with "double quotes" blablabla' 

>>> json.dumps(s) 
<<< '"my string with \\"double quotes\\" blablabla"' 
+1

'a bağlıdır. Güzel & hızlı düşünme düşüncesi :) Yedek yanıtımı kaldırma. –

+0

Neden json.dumps() tüm ekstra teklifleri ekliyor? Neden sadece \ "yerine fazladan ters eğik çizgi yani \\" ifadesini ekler? – user798719

+2

@ user798719 fazladan eklemez \. bu, konsolda yazdırdığı yoldur. –

15

Not: i json için bu dizeyi gerektiğinden

>>> a = {'x':1} 
>>> b = json.dumps(json.dumps(a)) 
>>> b 
'"{\\"x\\": 1}"' 
>>> json.loads(json.loads(b)) 
{u'x': 1} 
+0

Python FTW !!! :( –

İlgili konular