Избегайте двойных кавычек для JSON в Python

Как я могу заменить двойные кавычки на обратную косую черту и двойные кавычки в Python?

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

Я хотел бы получить следующее:

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

person aschmid00    schedule 13.05.2011    source источник


Ответы (5)


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

Когда вы просто запрашиваете «s», он экранирует \ для вас, когда вы его печатаете, вы видите строку в более «сыром» состоянии. А сейчас...

>>> s = """my string with "double quotes" blablabla"""
'my string with "double quotes" blablabla'
>>> print s.replace('"', '\\"')
my string with \"double quotes\" blablabla
>>> 
person Andrew    schedule 13.05.2011
comment
Это разница между repr() и str(). print s печатает строку, а s в командной строке делает то же самое, что и print repr(s). - person Mike DeSimone; 14.05.2011
comment
-1, потому что @zeekay ниже предлагает более идеоматический ответ: json.dumps(s). Он использует стандартную библиотеку JSON для достижения желаемого эффекта. Когда вы сталкиваетесь с этим кодом, вы сразу видите, что мы имеем дело с сериализацией JSON. OTOH, когда вы видите s.replace('"', '\\"'), вы должны угадать, что происходит. - person Pavel Repin; 15.05.2011
comment
Иногда со встроенным python у вас может не быть доступа ко всему импорту. - person AnthonyVO; 11.04.2012
comment
-1 в пользу json.dumps(string), так как он проще и чище. - person tamakisquare; 17.04.2012
comment
@tamakisquare Не забывайте и о безопаснее. - person Seldom 'Where's Monica' Needy; 03.10.2016
comment
@tamakisquare Не забывайте и медленнее :) Все зависит - person TheRueger; 05.03.2018

Вы должны использовать модуль json. json.dumps(string). Он также может сериализовать другие типы данных Python.

import json

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

>>> json.dumps(s)
<<< '"my string with \\"double quotes\\" blablabla"'
person zeekay    schedule 13.05.2011
comment
Почему json.dumps() добавляет все дополнительные кавычки? Почему он добавляет дополнительную обратную косую черту, т. е. \\, а не просто \? - person user798719; 04.07.2013
comment
@ user798719 он не добавляет лишних \. так он печатает это в консоли. - person Victor Miroshnikov; 01.08.2013
comment
TIL json.dumps может работать как с одноэлементными строками, так и с dict объектами. - person MarkHu; 23.04.2014
comment
Хотел бы отметить, что, хотя это хороший метод, поскольку он использует стандартную библиотеку и прост в использовании, использование json.dumps работает медленно. Если скорость является решающим элементом, я бы не рекомендовал использовать этот метод. - person Ashish Ahuja; 17.08.2018

Обратите внимание, что вы можете избежать массива/словаря json, дважды выполнив json.dumps и дважды json.loads:

>>> a = {'x':1}
>>> b = json.dumps(json.dumps(a))
>>> b
'"{\\"x\\": 1}"'
>>> json.loads(json.loads(b))
{u'x': 1}
person Medhat Gayed    schedule 09.09.2013
comment
Работа из коробки. Спасибо! - person negrotico19; 18.06.2019

Я знаю, что этот вопрос старый, но, надеюсь, он кому-то поможет. я нашел отличный плагин для тех, кто использует PyCharm IDE: string-manipulation который может легко избежать двойных кавычек (и многих других...), этот плагин отлично подходит для случаев, когда вы знаете, какой будет строка. в других случаях рекомендуется использовать json.dumps(string).

str_to_escape = 'my string with "double quotes" blablabla'

after_escape = 'my string with \"double quotes\" blablabla'
person Tam Nguyen    schedule 20.02.2021

Почему бы не сделать подавление строк тройными кавычками:

>>> s = """my string with "some" double quotes"""
>>> print s
my string with "some" double quotes
person inspectorG4dget    schedule 13.05.2011
comment
потому что мне нужна эта строка для json. мне нужно \ там. - person aschmid00; 13.05.2011
comment
Я думаю, он хочет сохранить \, чтобы в json кавычки были экранированы. - person Andrew; 13.05.2011