2013-06-14 16 views
5

Bir JSON zarfında tarayıcıya göndermek için bazı JavaScript oluşturan bir Python betiğim var. JavaScript dizelerinden kaçmak ve bunları tek tırnak işareti ile sınırlamak istiyorum. json.dumps kullanamıyorum çünkü JSON özelliği gerektiren sınırlayıcılar olarak çift tırnak kullanmaktadır.Python'daki JavaScript Dizgileri'nden Çıkarma

Python'da bir JavaScript String çıkış yöntemi var mı?

Örnek

def logIt(self, str): 
    #todo: need to escape str here 
    cmd = "console.log('%(text)s');" % { 'text': str} 
    json.dumps({ "script": cmd }) 

Yani logIt('example text') böyle bir şey dönmelidir:

{ 
    "script": "console.log('example text');" 
} 
+0

sizin kod \ Uh oh sen '( – kirelagin

+1

değil logit 'için ... tam olarak ne gerek döndüren geliyor bana '') ' – Eric

+0

Neden tek ve çift tırnaklı tırnakları önemsiyorsunuz? – Eric

cevap

7

json.dumps fonksiyonunu kaçan olmasıdır - bu herhangi bir değer alır ve geçerli bir javascript değişmez hale getirir.

>>> print logIt('example text') 
{ "script": "console.log(\"example text\");" } 
>>> print logIt('example "quoted" text') 
{ "script": "console.log(\"example \\\"quoted\\\" text\");" } 

Veya:

def logIt(self, str): 
    cmd = "console.log({0});".format(json.dumps(str)) 
    json.dumps({ "script": cmd }) 

üreten

import string 
import json 
import functools 

quote_swap = functools.partial(
    string.translate, table=string.maketrans('\'"', '"\'') 
) 

def encode_single_quoted_js_string(s): 
    return quote_swap(json.dumps(quote_swap(s))) 
+0

Evet, json.dumps hakkında ama sadece ' –

+0

@LanceFisher olabilir tırnaklar için \\\ "sahip olmaktan kaçınmak istiyorum: Ama' '' '' '' '' '' orijinal metin - '' '' '' '' '' '' '' '' '' '' '' '-' '' '' '' '' 'önleyemezsiniz. "\" ' – Eric

+0

'ya atıfta bulunduğunuzu varsayarsınız, bu örnekte bu \" dir. etrafında çift tırnak koyar json.dumps. Temel olarak, bunun yerine tek tırnak işareti veren bir json.dumps() istiyorum. –