2011-05-13 23 views
23

¿Cómo puedo reemplazar las comillas dobles con una barra diagonal inversa y comillas dobles en Python?Escape comillas dobles para JSON en Python

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

me gustaría obtener la siguiente:

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

Respuesta

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

Cuando acaba de pedir 's' se escapa el \ para usted, cuando lo imprime, ve la cadena un estado más 'en bruto'. Así que ahora ...

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

Es la diferencia entre 'repr()' y 'str()'. 'print s' imprime la cadena, mientras que' s' en la línea de comando hace lo mismo que 'print repr (s)'. –

+1

-1 porque @zeekay, a continuación, ofrece una respuesta más ideomática: 'json.dumps (s)'. Utiliza la biblioteca JSON estándar para lograr el efecto deseado. Cuando encuentras este código, inmediatamente ves que estamos tratando con la serialización JSON. OTOH, cuando veas 's.replace ('"', '\\ "')', tienes que adivinar qué está pasando. –

+1

A veces con python incrustado es posible que no tenga acceso a todas las importaciones. – AnthonyVO

-2

¿Por qué no la supresión cadena con comillas triples:

>>> s = """my string with "some" double quotes""" 
>>> print s 
my string with "some" double quotes 
+0

porque necesito esta cadena de JSON. Necesito el \ allí. – aschmid00

+0

Creo que quiere preservar el \ para que en json las cotizaciones se escapen. – Andrew

65

usted debe utilizar el módulo json. json.dumps(string). También puede serializar otros tipos de datos de Python.

import json 

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

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

Pensamiento agradable y rápido :) Eliminar mi respuesta redundante. –

+0

¿Por qué json.dumps() agrega todas las comillas adicionales? ¿Por qué agrega una barra invertida adicional, es decir, \\ ", en lugar de simplemente \"? – user798719

+2

@ user798719 no agrega extra \. esa es la forma en que lo imprime en la consola. –

15

Observe que puede escapar de una matriz JSON/Diccionario haciendo json.dumps dos veces y dos veces json.loads:

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

Python FTW !!! :( –

Cuestiones relacionadas