#python #json #str-replace
#python #json #str-заменить
Вопрос:
У меня есть файл JSON, который был преобразован в строку в Python. Каким-то образом двойные кавычки были заменены одинарными кавычками.
{'MyJSON': {'Report': '1' ....
Мне нужно преобразовать мою строку так, чтобы она была в этом формате:
{"MyJSON": {"Report": "1" ....
Моя проблема в том, что с помощью str.replace я не могу понять, как преобразовать одинарную кавычку в двойную кавычку, поскольку обе кавычки экранированы.
Моя конечная цель — иметь возможность поместить строку в json.loads, чтобы я мог ее распечатать.
Попытки:
txt.replace(r"'", r'"')
> "{'MyJSON': {'Report': '1'"
txt.replace(""", "'")
> "{'MyJSON': {'Report': '1'"
Если я сохраню свою строку в текстовый файл, она появится в предварительном просмотре как:
{'MyJSON': {'Report': '1' ...
Поэтому я думаю, что мне действительно нужно сделать, это заменить ‘ на »
Я решил использовать ast.literal_eval(txt)
который может преобразовать мою строку в словарь. Оттуда json.loads(json.dumps(dict))
я попадаю в JSON
Комментарии:
1. Звучит так, как будто вы загрузили JSON в dict, а затем использовали
json.dumps(str(the_dict))
. Вы должны просто использоватьjson.dumps(the_dict)
, не преобразовывая его сначала в строку.2. @Barmar Да, моя конечная цель — исправить восходящий поток в процессе, но пока я застрял с конечным результатом. Я думаю, что произошло то, что JSON был зашифрован в строку.
3. Вы уверены, что строка действительно содержит буквальные символы обратной косой черты? Если строка содержит кавычку, ее печать в REPL будет экранировать одинарные кавычки.
4.
>>> "foo"'bar"
отображает'foo"'bar'
5. @Barmar Отличный момент, я сбросил строку в текстовый файл, и буквальный символ обратной косой черты исчез. Я думаю, что мне действительно нужно сделать, это «->»
Ответ №1:
я имею в виду,
my_string = ""'"
print(my_string.replace("'", """))
работает отлично
РЕДАКТИРОВАТЬ: я не имел в виду использовать это напрямую, это было доказательством концепции. В моем замена была отменена. Я обновил этот фрагмент таким образом, чтобы его можно было напрямую вставить в ваш код. Попробуйте еще раз
Комментарии:
1. Это делает противоположную замену от того, что он хочет.
2. Это заменит все кавычки, а не только те, перед которыми стоит обратная косая черта.
3. @Barmar таким образом, просто пример, я могу обновить его, чтобы он был в правильной замене, однако разве он не хотел заменить все кавычки? Я не думаю
\"
, что в его скрипте когда-либо было вхождение, которое переводилось бы в"
Ответ №2:
Вместо того, чтобы сосредотачиваться на обратных косых чертах, пытаясь «взломать» строку json / dict str в JSON, лучшее решение — делать это шаг за шагом и начинать с преобразования моей строки dict в словарь.
import ast
txt = ast.literal_eval(txt) # convert my string to a dictionary
txt = json.loads(json.dumps(txt)) # convert my dict to JSON