Преобразование одинарной кавычки с обратной косой чертой в двойную косую черту для JSON

#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