2013-06-14 25 views
5

JavaScriptをJSONエンベロープのブラウザに送信するPythonスクリプトがあります。私は、JavaScript文字列をエスケープし、単一引用符で区切りたいと思います。 json.dumpsを使用することはできません。なぜなら、JSON仕様のようにデリミタとして二重引用符を使用するからです。PythonでJavaScript文字列をエスケープする

PythonにJavaScript文字列エスケープメソッドがありますか?

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

だから logIt('example text')はこのような何かを返す必要があります:

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

あなたのコードは、あなたが必要とする正確に何を返すように私には思える... – kirelagin

+1

ない(ロジット 'のための「ええとああ\ '') ' – Eric

+0

なぜあなたは単一引用符と二重引用符を気にしますか? – Eric

答えて

7

json.dumpsは、機能をエスケープすることである - それは、任意の値を取り、それが有効なJavaScriptリテラルなります。

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

生産:

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

または:

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

ええ、私はjson.dumpsについて知っています、しかし、引用符のために\\\ "を避けたいのです。 ' –

+0

@ LanceFisher:ここで' \\\' 'を避けることはできません。元のテキストには' ''が含まれています。私はあなたが '\" 'を参照していると仮定していますか? – Eric

+0

あなたはそうです、この例では\"です。 json.dumpsは二重引用符で囲みます。基本的には、代わりに一重引用符を出力するjson.dumps()が必要です。 –

関連する問題